求助:汇编程序

来源:百度知道 编辑:UC知道 时间:2024/07/04 00:34:06
DATA SEGMENT
OPR1 DB 35H,27H,4AH ;(4A2735H)
OPR2 DB 93H,87H,65H ;(658793H) C8AEAFH
LEN DB 3
SUM DB 3 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET OPR1
MOV BX,OFFSET OPR2
MOV DI,OFFSET SUM
MOV CX,LEN
CLC
L1: MOV AL,[SI] ;相加
ADC AL,[BX]
MOV [DI],AL
INC SI
INC BX
INC DI
LOOP L1
call display
MOV AH,4CH
INT 21H

show proc near
cmp dl,09h ;大于9则跳转
ja next
add dl,30h
jmp next_1
next:
add dl,37h
next_1:
mov ah,02h
int 21h
ret
show endp

display proc near
mov cl,4

做如下修改后,运行完全正常!
对照一下和你的区别
主要错误出于:DISPLAY子程序中,应循环3次,最重要的是在DISPLAY子程序中调用SHOW子程序时AL值已经改变,所以造成了你说的问题,这里用R代替AL则不存在上述问题(另外最好将LEN的值3直接赋予CX,没有必要再定义常量)
DATA SEGMENT
OPR1 DB 35H,27H,4AH ;(4A2735H)
OPR2 DB 93H,87H,65H ;(658793H) C8AEAFH
SUM DB 3 DUP(?)
LEN db 3
r db ? ;新增------
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX

MOV SI,OFFSET OPR1
MOV BX,OFFSET OPR2
MOV DI,OFFSET SUM
MOV CX,LEN
CLC
L1: MOV AL,[SI] ;相加
ADC AL,[BX]
MOV [DI],AL
INC SI
INC BX
INC DI
LOOP L1
call display
MOV AH,4CH
INT 21H

show proc near
cmp dl,09h ;大于9则跳转
ja next
add dl,30h
jmp next_1
next:
add dl,37h
next_1:
mov ah,02h
int 21h
ret
show endp

display proc near
mov cl,4
lea si,sum
mov al,3