南邮微机接口汇编实验1
程序员文章站
2022-06-20 20:22:54
...
南邮汇编程序实验
更改程序,使其正常运行
更改后的代码:
;FILENAME: EXA131.ASM
;.486
DATA SEGMENT ; DATA SEGMENT为段定义语句,段名为DATA,USE16单元有效地址为16位,16位寻址方式
SUM DW ? ;变量名为SUM,定义2个字节变量
MESG DB '25+9=' ;变量名为MESG,定义字节变量
DB 0,0,'$'
N1 DB 9 ;,F0H
N2 DB 25
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA ;段约定语句,
BEG: MOV AX,DATA ;设置DS初值
MOV DS,AX
MOV BX,OFFSET SUM ;bx基址寄存器暂存SUM的相对于数据段DS的偏移地址
MOV AH,N1
MOV AL,N2
ADD AH,AL
MOV [BX],AH ;25+9的和存入SUM
CALL CHANG
MOV AH,9 ;DOS功能调用09H号显示字符串
MOV DX,OFFSET MESG ;入口参数DX=字符串首地址,字符串必须以‘$’为结束标志
INT 21H
CHANG PROC
LAST: CMP BYTE PTR [BX],10 ;[BX]基址寻址指向SUM,和10立即数的类型属性不确定,需要PTR。即SUM和10比较,若SUM<10,则跳转到NEXT
JC NEXT
SUB BYTE PTR [BX],10 ;SUM>10则SUM=SUM-10
INC BYTE PTR [BX+7] ;BX+7即输出的十位数加1
JMP LAST ;JMP即JUMP无条转移
NEXT: MOV AX,SUM ;不能直接在SUM和[BX+8]之间传值,需要中间一个AH寄存器
ADD [BX+8],AX ; 定位到MESG DB 0,0的位置填入值,+8是后一个0
ADD BYTE PTR [BX+7],30H ; 30H是0的ASCII
ADD BYTE PTR [BX+8],30H
RET
CHANG ENDP
CODE ENDS
END BEG
程序运行结果如下