欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

南邮微机接口汇编实验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

程序运行结果如下

南邮微机接口汇编实验1