巫师3高等剑油:请用汇编完成

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/29 06:54:00
从键盘输入加数和被加数,要求在屏幕上显示加数和被加数以及和.
要求末位对齐,如果输入的加数和被加数的最高位是0.自动抹去,输入加数和被加数的位数不受限制,要求用宏定义,伪指令,子程序,键盘输入,屏幕输出等指令.
例如,运行程序后键盘输入为:
0987
235
屏幕输出应为:
987
235
1222
屏幕输出是错的,这是知道的问题 后面要对齐

SSEG SEGMENT STACK
STK DB 20 DUP(?)
SSEG ENDS
DSEG SEGMENT
DATA1 DB 255
DB 0
DB 255 DUP(0)

DATA2 DB 255
DB 0
DB 255 DUP(0)

DATA3 DB 255 DUP(0)

DATA4 DB 255 DUP(0)

LEN1 DW 0

LEN2 DW 0

LEN DW 0

DATA5 DB 255 DUP(0)

STR DB 0AH,0DH,'$'

SPACE DB 20H,'$'

JINWEI DB 0

DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG,SS:SSEG
START: MOV AX,DSEG
MOV DS,AX

MOV DX,OFFSET DATA1
MOV AH,0AH
INT 21H

CALL HuiChe_HuanHang

MOV DX,OFFSET DATA2
MOV AH,0AH
INT 21H

CALL HuiChe_HuanHang

MOV CL,DATA1[1]
MOV CH,0
MOV BX,CX
MOV DI,0
MOV SI,1

L0: INC SI
DEC CX
MOV AL,DATA1[SI]
CMP AL,'0'
JE L0
INC CX

ADD BX,2
SUB BX,SI
MOV LEN1,BX
L01: MOV AL,DATA1[SI]
SUB AL,'0'
MOV DATA3[DI],AL
INC SI
INC DI
LOOP L01

MOV CL,DATA2[1]
MOV CH,0
MOV BX,CX
MOV DI,0
MOV SI,1

L1: INC SI
DEC CX
MOV AL,DATA2[SI]
CMP AL,'0'

JE L1
INC CX
ADD BX,2
SUB BX,SI

MOV LEN2,BX
L10: MOV AL,DATA2[SI]
SUB AL,'0'
MOV DATA4[DI],AL
INC SI
INC DI
LOOP L10

MOV SI,LEN1

MOV DI,LEN2

CMP SI,DI
JAE L2
MOV AX,DI
ADD AX,1
MOV LEN,AX
JMP L3
L2: MOV AX,SI
ADD AX,1
MOV LEN,AX

L3: MOV BX,LEN

MOV AL,DATA3[SI-1]
ADD AL,DATA4[DI-1]
DAA

MOV AH,AL
AND AH,0F0H
JZ L31
MOV JINWEI,1
AND AL,0FH

L31: MOV DATA5[BX-1],AL

CMP SI,1
JE L5
CMP DI,1
JE L6

L4: DEC SI
DEC DI
DEC BX
MOV AL,DATA3[SI-1]

ADD AL,JINWEI

ADD AL,DATA4[DI-1]
DAA

MOV JINWEI,0

MOV AH,AL
AND AH,0F0H
JZ L41
MOV JINWEI,1
AND AL,0FH

L41: MOV DATA5[BX-1],AL

CMP SI,1
JE L5
CMP DI,1
JE L6
JMP L4

L5: CMP DI,1
JE L7

L51: DEC DI
DEC BX
MOV AL,DATA4[DI-1]

ADD AL,JINWEI
DAA

MOV JINWEI,0

MOV AH,AL
AND AH,0F0H
JZ L52
MOV JINWEI,1
AND AL,0FH

L52: MOV DATA5[BX-1],AL

CMP DI,1
JE L7
JMP L51

L6: CMP SI,1
JE L7

L61: DEC SI
DEC BX
MOV AL,DATA3[SI-1]

ADD AL,JINWEI
DAA

MOV JINWEI,0

MOV AH,AL
AND AH,0F0H
JZ L62
MOV JINWEI,1
AND AL,0FH

L62: MOV DATA5[BX-1],AL

CMP SI,1
JE L7
JMP L61

L7: MOV AL,JINWEI
ADD DATA5[0],AL

L8: MOV SI,LEN1

MOV DI,LEN2

MOV BX,LEN

MOV DATA5[BX],'$'
MOV DATA3[SI],'$'
MOV DATA4[DI],'$'

CALL HuiChe_HuanHang

L9: ADD DATA5[BX-1],'0'
DEC BX
JNZ L9

L91: ADD DATA3[SI-1],'0'
DEC SI
JNZ L91

L92: ADD DATA4[DI-1],'0'
DEC DI
JNZ L92

MOV AL,DATA5[0]
CMP AL,'0'
JNE LAA
MOV SI,1
SUB LEN,1
JMP LAB
LAA: MOV SI,0

LAB: MOV CX,LEN
SUB CX,LEN1
CALL SPP

MOV DX,OFFSET DATA3
MOV AH,09H
INT 21H

CALL HuiChe_HuanHang

MOV CX,LEN
SUB CX,LEN2
CALL SPP

MOV DX,OFFSET DATA4
MOV AH,09H
INT 21H

CALL HuiChe_HuanHang

CMP SI,1
JE LLLL

MOV DX,OFFSET DATA5
MOV AH,09H
INT 21H
JMP DONE

LLLL: MOV DX,OFFSET DATA5+1
MOV AH,09H
INT 21H

JMP DONE

SPP PROC NEAR ;输出空格子程序

CMP CX,0
JZ DD10
LPP: MOV DX,OFFSET SPACE
MOV AH,09H
INT 21H
DEC CX
JNZ LPP
DD10: RET

SPP ENDP

HuiChe_HuanHang PROC NEAR ;回车换行子程序

MOV DX,OFFSET STR
MOV AH,09H
INT 21H
RET

HuiChe_HuanHang ENDP

DONE: MOV AH,4CH
INT 21H

CSEG ENDS
END START

自己做吧,这样好像不太好~~~