以美元结尾的字符串
问题描述:
在我的汇编语言课程中,我们的第一项任务是编写一个程序在DOS中打印出一个简单的以美元结尾的字符串。它看起来是这样的:以美元结尾的字符串
BITS 32
global _main
section .data
msg db "Hello, world!", 13, 10, ’$’
section .text
_main:
mov ah, 9
mov edx, msg
int 21h
ret
据我了解,$符号用来像空确实在C.但是,我该怎么办终止刺痛,如果我想要把一个美元符号的字符串(如我想打印出“它需要30美元”)?这看起来像一个简单的问题,但我的教授不知道答案,我似乎没有找到它使用谷歌搜索。
答
嗯。您可以编写汇编,以考虑转义的$
,例如\$
? 但随后你\
成为一个特殊符号过了,你需要使用\\
打印\
答
尝试 '$$', '\ 044'(八进制)或 '\ X24'(十六进制)
答
或使自己的print_string使用无证INT 29H(打印字符的打印NULL结束的字符串AL)。
; ds:si = address of string to print
print_string:
lodsb ; load next character from ds:si
or al, al ; test for NULL-character
jz .end_of_string ; end of string encountered, return.
int 29h ; print character in AL on screen
jmp print_string ; print next character
.end_of_string:
ret ; return to callers cs:ip
(假设你使用NASM)
答
一种方法是找到打印单个字符的呼叫。你可以打印任何字符。打破字符串并打印“费用”,然后打印“$”,最后打印“30”。更多的工作,但它完成了工作。
答
您可以使用INT 21H的02服务而不是09服务。
下面是示例。
mov dl, '$'
mov ah,02
int 21h
看起来0x40的应该工作以及:http://www.uv.tietgen.dk/staff/mlha/PC/Prog/asm/int/21/40.htm – 2009-01-26 21:26:31
或者,你可以使用0x40,但是这要求你指定要写入的字节数(即它不使用分隔字符串)。 – 2009-01-26 21:26:33
@Jason - 嘿,打我一秒钟。 :-) – 2009-01-26 21:27:49