我有以下程序从A到Z打印,它们之间有空格。在下面的程序中,我理解了其余的代码,但不明白为什么使用PUSH和POP操作。如果我在不使用PUSH和POP的情况下运行代码,我只会打印“!”而不是charecters。
.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
答案 0 :(得分:4)
DX
寄存器开始加载65,A
的ASCII码,DH
和DL
寄存器分别是{{1}的上半部分和下半部分。 1}}。
DX
宏将32(空间的ASCII代码)加载到DL中,覆盖其中的任何内容。 SPACE
PUSH DX
在打印空格中间字符时保存并恢复寄存器的状态。至于为什么你看到POP DX
,这是因为在打印空间后没有恢复DX,你只需要增加32到33并打印那个角色。
答案 1 :(得分:3)
在SPACE中将DL设置为空格字符,但在主循环中使用DL作为A到Z字符。 SPACE的扩展会覆盖DL,因此您可以在它之前将其存储到堆栈中,然后在SPACE之后将其恢复。
答案 2 :(得分:0)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li><img src="https://via.placeholder.com/650x100"></li>
<li><img src="https://via.placeholder.com/150x350"></li>
<li><img src="https://via.placeholder.com/100"></li>
<li><img src="https://via.placeholder.com/350x350"></li>
</ul>