【发布时间】:2016-01-20 21:12:14
【问题描述】:
这是一个 x86 asm 程序,它在屏幕中间打印一个从 000 到 999 的“计数器”,效果很好(我没有写)。问题是我试图了解它是如何工作的。 DIV 和 STACK 在 THIS 程序中有什么用处。
程序如何知道如何进行,例如从 009 到 010。什么是内循环?
我知道它是如何清屏并打印到屏幕中间的,我知道时钟延迟功能。
DIV、PUSH 和 POP 在此程序中的用途是什么?
基本上我正在尝试跟踪它并了解所使用的功能。我还是一个初学者,请帮助。谢谢。
代码如下:
.MODEL SMALL
.STACK 64
.DATA
CNT DW 0h
.CODE
MOV AX,@data
MOV DS,AX
MOV AX, 0600H
MOV BH,07
MOV CX, 0000
MOV DH,12
MOV DL,39
INT 10H
MOV AX,0600H
MOV BH,07
MOV CX,0000
MOV DX,184FH
INT 10H
MOV CNT,0
L1: MOV AH,02h
MOV BH,0
MOV DH,12
MOV DL,39
INT 10h
MOV AX,CNT
MOV BL,10
DIV BL
PUSH AX
MOV AH,00
MOV BL,10
DIV BL
PUSH AX
MOV DL,AL
ADD DL,48
MOV AH,02h
INT 21h
POP AX
MOV DL,AH
ADD DL,48
MOV AH,02h
INT 21h
POP AX
MOV DL,AH
ADD DL,48
MOV AH,02h
INT 21h
MOV CX, 0007h
MOV DX, 2120h
MOV AH, 86H
INT 15H
INC CNT
CMP CNT,999
JBE L1
MOV AH,4ch
INT 21h
END
【问题讨论】:
-
JBE L1是一个跳转指令,使执行在L1: MOV AH,02h处继续进行 -
使用调试器单步调试代码可能会大大提高您对这段代码的作用和原因的理解程度。