assembly 显示程序集中的数据

jgwigjjp  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(143)

我刚开始学习汇编,我对DL(数据寄存器)和AL(累积寄存器)有一点困惑。

mov dl,35h
mov ah,2
int 21h

运行后,值35h将首先移动到AL,然后显示。
而在取输入输出程序时:

mov ah, 1
int 21h
mov dl,al
mov ah,2
int 21h

首先使用mov将值复制到DL,但是为什么不能直接从AL显示它,因为它已经输入到AL中了?

5m1hhzi4

5m1hhzi41#

mov dl,35h
mov ah,2
int 21h

运行后,值35 h将首先移动到AL,然后显示。
一开始我以为你指的是这个DOS函数确实把DL复制到AL作为它正常操作的一部分。这个函数返回的是AL寄存器中输入的字符。也许这就是你困惑的地方吧?
您可能想看一下Displaying characters with DOS or BIOS
DOS.KeyboardInputWithEcho函数01 h提供给您的是AL寄存器中的字符,而DOS.DisplayCharacter函数02 h要求您提供的是DL寄存器中的字符。这就是为什么您需要额外的put in mov dl, al指令的原因。
为什么我们不能直接从AL中显示它,因为它已经输入到AL中了?
如果您选择了BIOS.Teletype函数0 Eh来显示字符,那么您就不必将AL复制到DL,因为该BIOS函数确实需要AL寄存器中的字符。
无论是BIOS还是DOS,对于每个API调用,您都必须找出哪些寄存器需要哪些信息,以及哪些寄存器将包含结果。无需猜测!
最终,是api的设计者选择了寄存器,我们只能跟随。

相关问题