作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下程序,可以从 A 到 Z 打印,中间有一个空格。在下面的程序中,我理解了其余的代码,但不明白为什么要使用 PUSH DX
和 POP DX
指令。如果我在不使用 PUSH DX
和 POP DX
的情况下运行代码,它只会打印“!”而不是字符。
.model small
.stack
.data
VAL DB 'A'
.code
MAIN PROC
SPACE MACRO
MOV DL, ' '
MOV AH, 02h;
INT 21H
ENDM
MOV AX, @DATA
MOV DS, AX
MOV CL, 26
MOV DL, 65 ; MOV DL, VAL
PRINT:
MOV AH, 02H
INT 21H
PUSH DX
SPACE
POP DX
INC DL
DEC CL
JNZ PRINT
MOV AH, 4CH
INT 21H
MAIN ENDP
END MAIN
最佳答案
DX
寄存器开始加载 65,A
的 ASCII 码,DH
和 DL
寄存器分别是DX
的上下半部分。
SPACE
宏将 32(空格的 ASCII 代码)加载到 DL 中,覆盖其中的任何内容。 PUSH DX
POP DX
在打印字符间的空格时保存和恢复寄存器的状态。至于为什么会看到 !
,那是因为在打印空格后不恢复 DX,您只需将 32 递增到 33 并打印该字符。
关于assembly - 从 A 到 Z 打印的 8086 汇编语言程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20868746/
我是一名优秀的程序员,十分优秀!