题
在我的汇编语言班,我们的第一项任务是写一个程序,打印出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”什么终止刺痛)?这似乎是一个简单的问题,但我的教授不知道答案,我似乎没有使用谷歌搜索找到它。
解决方案
您不能使用DOS的0x09
服务以显示$
迹象,你将需要使用0x02
。请参阅这里。
其他提示
,或使自己print_string使用无证INT 29H(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”。更多的工作,但它能够完成任务。
可以使用 02服务强> INT 21H代替的 09服务强>
下面是样品
mov dl, '$'
mov ah,02
int 21h
尝试 '$$', '\ 044'(八进制)或 '\ X24'(十六进制)
不隶属于 StackOverflow