程序要求
流程图
汇编代码
STACK1 ENDS
DATA SEGMENT
BUF DB 30H,30H,30H,31H,32H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET BUF ;把BUF的偏移地址存到SI中去
MOV BX,000AH
MOV CX,0004H ; cx作为循环控制计数器
MOV AH,00H
MOV AL,[SI]
SUB AL,30H
A1: IMUL BX
ADD AL,[SI+01]
SUB AL,30H
INC SI
LOOP A1
MOV [SI],AX
CALL SHOW ;调用子程序
MOV AX,4C00H
INT 21H
SHOW PROC NEAR ; 输出到屏幕,用16进制表示
MOV AL,DS:[SI]
AND AL,0F0H
MOV CL,4
SHR AL,CL
CMP AL,0AH
JB C2
ADD AL,07H
C2: ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H
MOV AL,DS:[SI]
AND AL,0FH
CMP AL,0AH
JB C3
ADD AL,07H
C3: ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H
RET
SHOW ENDP
CODE ENDS
END START
相关知识:
LOOP指令 1.CX=CX-1 2.判断cx中的值,不为0,执行标号程序 A1, 为0,向下执行 (即执行 MOV [SI],AX)
DEBUG分析
1.程序运行到 MOV [SI],AX 的时候,已经完成循环,这个指令是把AX的内容存到SI对应的内存单元中,由SI的值可以知道已经循环了4次
2.观察内存中内容的变化
-D 查看内存数据
-T 单步执行