帮我改改--多字节有符号数的加法程序--运行不出来

xone777 2007-12-27 01:05:20
DATAS SEGMENT
NUM1 DB 100
DB ?
DB 100 DUP(?)
NUM2 DB 100
DB ?
DB 100 DUP(?)
P1 DB 'INPUT NUMBER1:''$'
P2 DB 'INPUT NUMBER2:''$'
CR DB 0DH,0AH,'$'
MINU DB 0
DATAS ENDS
STACKS SEGMENT
SB DW 100 DUP(?)
TOP LABEL WORD
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
MAIN PROC FAR
START: MOV AX,STACKS
MOV SS,AX
MOV SP,OFFSET TOP
MOV AX,DATAS
MOV DS,AX
;;ÊäÈë²¢´æ´¢
MOV AH,09
LEA DX,P1
INT 21H
MOV AH,0AH
MOV DX,OFFSET NUM1
INT 21H
CALL ZHUANHUAN
PUSH AX
LEA DX,CR
INT 21H
LEA DX,P2
INT 21H
MOV AH,0AH
MOV DX,OFFSET NUM2
INT 21H
CALL ZHUANHUAN
LEA DX,CR
INT 21H
;;Ïà¼Ó
POP DX
ADD AX,DX
;;Êä³ö
MOV DX,AX
AND DX,8000H
CMP DX,0
JZ ZSC
MOV AH,2
MOV DL,'-'
INT 21H
DEC AX
NEG AX
DEC AX
ZSC: CMP AX,9999
JBE TRAN
JMP ERR
TRAN: SUB DX,DX
MOV CX,1000
DIV CX
XCHG AX,DX
MOV CL,4
SHL DX,CL
MOV CL,100
DIV CL
ADD DL,AL
MOV CL,4
SHL DX,CL
XCHG AL,AH
SUB AH,AH
MOV CL,10
DIV CL
ADD DL,AL
MOV CL,4
SHL DX,CL
ADD DL,AH
MOV BX,DX
;;
MOV CH,4
MOV CL,4
LZ: ROL BX,CL
MOV DL,BL
AND DL,0FH
CMP DL,0
JNE LNZ
DEC CH
JNZ LZ
LL: ROL BX,CL
MOV DL,BL
AND DL,0FH
LNZ: ADD DL,30H
MOV AH,2
INT 21H
DEC CH
JNZ LL
JMP EXIT1


ZHUANHUAN PROC NEAR ;;ת»»³ÉÓзûºÅ¶þ½øÖÆÊý×Ó³ÌÐò
MOV BX,DX
MOV CX,[BX+1]
ADD DX,2
MOV SI,DX
MOV AL,[SI]
CMP AL,'-'
JNE CHK
MOV MINU,1
JMP DECS
CHK: CMP AL,'+'
JNE CLRD
DECS: DEC CX
INC SI
CLRD: SUB DX,DX
NEXT: CALL CHE
JC ERR
LODSB
CMP AL,'0'
JB ERR
CMP AL,'9'
JA ERR
AND AX,000FH
ADD DX,AX
JC ERR
LOOP NEXT
MOV AX,DX
CMP MINU,1
JNE EXIT
NEG AX
EXIT: RET
ERR: STC
MOV AH,4CH
INT 21H
CHE PROC NEAR
MOV BX,DX
SHL DX,1
SHL DX,1
ADD DX,BX
SHL DX,1
RET
CHE ENDP
ZHUANHUAN ENDP
EXIT1: RET
MAIN ENDP
CODES ENDS
END START
...全文
309 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
shulei521 2007-12-30
  • 打赏
  • 举报
回复
MOV AH,09
LEA DX,P1
INT 21H
MOV AH,0AH
MOV DX,OFFSET NUM1
INT 21H
CALL ZHUANHUAN
PUSH AX
LEA DX,CR
INT 21H
LEA DX,P2
INT 21H
MOV AH,0AH
MOV DX,OFFSET NUM2
INT 21H
CALL ZHUANHUAN
LEA DX,CR
INT 21H
;;Ïà¼Ó
POP DX
ADD AX,DX
;;Êä³ö
MOV DX,AX
AND DX,8000H
shulei521 2007-12-30
  • 打赏
  • 举报
回复
saaaaaaaaaaaaaaaaaaaa
zara 2007-12-27
  • 打赏
  • 举报
回复
; 下面行后带有 ;* 字样的是改动过的.
; 主要开始输入和显示部分没有设置显示功能号, 因为之前的转换子程改变了 ah 的内容; 转换子程中
; 对字符个数的设置, 那个域是字节, 不是字, 所以应该赋值于 CL 而不是 CX, CH 自己给 0; 最
; 后的显示部分, 结束时用的 ret 指令, 这个需要有前面的将 PSP:0000 压制来进行配合, 简单
; 的还是通过 int21h 的 4ch 功能来实现程序结束返回到 dos

DATAS SEGMENT
NUM1 DB 100
DB ?
DB 100 DUP(?)
NUM2 DB 100
DB ?
DB 100 DUP(?)
P1 DB 'INPUT NUMBER1: ', '$'
P2 DB 'INPUT NUMBER2: ', '$'
CR DB 0DH,0AH,'$'
MINU DB 0
DATAS ENDS
STACKS SEGMENT
SB DW 100 DUP(?)
TOP LABEL WORD
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
MAIN PROC FAR
START: MOV AX,STACKS
MOV SS,AX
MOV SP,OFFSET TOP
MOV AX,DATAS
MOV DS,AX
;
MOV AH,09
LEA DX,P1
INT 21H
MOV AH,0AH
MOV DX,OFFSET NUM1
INT 21H
CALL ZHUANHUAN
PUSH AX
mov ah, 9 ;*+
LEA DX,CR
INT 21H
LEA DX,P2
INT 21H
MOV AH,0AH
MOV DX,OFFSET NUM2
INT 21H
mov MINU, 0 ;*+
CALL ZHUANHUAN
push ax ;*+
mov ah, 9 ;*+
LEA DX,CR
INT 21H
;
pop ax ;*+
POP DX
ADD AX,DX
;
MOV DX,AX
AND DX,8000H
CMP DX,0
JZ ZSC
push ax ;*+
MOV AH,2
MOV DL,'-'
INT 21H
pop ax ;*+
DEC AX
NEG AX
DEC AX
ZSC: CMP AX,9999
JBE TRAN
JMP ERR
TRAN: SUB DX,DX
MOV CX,1000
DIV CX
XCHG AX,DX
MOV CL,4
SHL DX,CL
MOV CL,100
DIV CL
ADD DL,AL
MOV CL,4
SHL DX,CL
XCHG AL,AH
SUB AH,AH
MOV CL,10
DIV CL
ADD DL,AL
MOV CL,4
SHL DX,CL
ADD DL,AH
MOV BX,DX
;;
MOV CH,4
MOV CL,4
LZ: ROL BX,CL
MOV DL,BL
AND DL,0FH
CMP DL,0
JNE LNZ
DEC CH
JNZ LZ
LL: ROL BX,CL
MOV DL,BL
AND DL,0FH
LNZ: ADD DL,30H
MOV AH,2
INT 21H
DEC CH
JNZ LL
JMP EXIT1


ZHUANHUAN PROC NEAR
MOV BX,DX
MOV CL,[BX+1] ;*
mov ch, 0 ;*+
ADD DX,2
MOV SI,DX
MOV AL,[SI]
CMP AL,'-'
JNE CHK
MOV MINU,1
JMP DECS
CHK: CMP AL,'+'
JNE CLRD
DECS: DEC CX
INC SI
CLRD: SUB DX,DX
NEXT: CALL CHE
JC ERR
LODSB
CMP AL,'0'
JB ERR
CMP AL,'9'
JA ERR
AND AX,000FH
ADD DX,AX
JC ERR
LOOP NEXT
MOV AX,DX
CMP MINU,1
JNE EXIT
NEG AX
EXIT: RET
ERR: STC
MOV AH,4CH
INT 21H
CHE PROC NEAR
MOV BX,DX
SHL DX,1
SHL DX,1
ADD DX,BX
SHL DX,1
RET
CHE ENDP
ZHUANHUAN ENDP

EXIT1: ; RET ;*-
mov ah, 4ch ;*+
int 21h ;*+

MAIN ENDP
CODES ENDS
END START

21,498

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧