【发布时间】:2010-10-03 15:21:02
【问题描述】:
在我的汇编语言课上,我们的第一个任务是编写一个程序,在 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 中的 null 一样。但是如果我想在字符串中添加一个美元符号该怎么办(比如我想打印出“it cost $30” )?这似乎是一个简单的问题,但我的教授不知道答案,而且我似乎没有使用谷歌搜索找到它。
【问题讨论】:
-
BITS 32??你如何让你的 DOS 程序在 32 位模式下执行,但仍然能够使用int 21hDOS 调用?如果机器代码实际上以 16 位模式执行,则解码的 16 位mov r16, imm16指令的长度与发出的 32 位mov r32, imm32NASM 的长度不同,因此msg地址的高 2 字节将解码作为指示。 (可能是00 00 add [bx+si], al,正好用完这两个字节,让执行到达int 21h,所以你的代码有可能碰巧在16位模式下工作)