在我的汇编语言班,我们的第一项任务是写一个程序,打印出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'(十六进制)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top