📄 fenzhichengxu.asm
字号:
;代码段
code segment 'code'
assume cs:code
;----------------------------------------------------------------------------------
start: ;mov ax,data ;程序开始点
;mov ds,ax ;设置DS指向程序数据段的地址
mov ah,01h ;输入第一个操作数存入BH中
int 21h
mov bh,al
call kongge
mov ah,01h ;输入第二个操作数存入BL中
int 21h
mov bl,al
call kongge
mov ah,01h ;输入分支条件存入AL中
int 21h
call kongge
cmp al,41h ;AL为A则计算X+Y
jz functionA
cmp al,42h ;AL为B则计算|X-Y|
jz functionB
cmp al,43h ;AL为C则计算X*Y
jz functionC
cmp al,44h ;AL为C则计算X/Y
jz functionD
;mov dl,0Eh ;换行输出结果
;mov ah,02h
;int 21h
;-----X+Y---------------先进行运算后修订结果输出-------------------------------------
functionA:add bh,bl ;相加结果存bh
cmp bh,69h ;与结果小于等于69h直接减30h修正
jbe funa1
cmp bh,6Fh ;结果小于等于6Fh直接减29h修正
jbe funa2
cmp bh,76h ;结果等于76h直接减30h修正
jZ funa3
cmp bh,82h ;结果等于82h直接减4Eh修正
jZ funa4
sub bh,47h ;否则直接减47h修正
mov dl,31h
mov dh,bh
jmp disp
funa1: sub bh,30h
mov dl,30h
mov dh,bh
jmp disp
funa2: sub bh,29h
mov dl,30h
mov dh,bh
jmp disp
funa3: sub bh,30h
mov dl,30h
mov dh,bh
jmp disp
funa4: sub bh,4Eh
mov dl,31h
mov dh,bh
jmp disp
;-----|X-Y|---------------------------------------------------------------------------
functionB:cmp bh,bl ;两数相比较大数存于bh,小数存于bl
jnbe next
xchg bh,bl
next: sub bh,bl ;修正结果
add bh,30h
mov dl,30h
mov dh,bh
jmp disp
;-----X*Y------------------------------------------------------------------------------
functionC:cmp bh,39h ;现将两个操作数转换成16进制的数
jnbe func1 ;A~F之间的数直接减37h
sub bh,30h ;0~9之间的数直接减30h
jmp func2
func1: sub bh,37h
func2: cmp bl,39h
jnbe func3
sub bl,30h
jmp func4
func3: sub bl,37h
func4: mov al,bl ;将bl移进al中
mul bh ;进行乘法运算
and ax,00ffh
mov cl,10h ;除10h进行转换,商在(十位)al中,余数(个位)在ah中
div cl
cmp ah,09h ;现将十位个位数转换成16进制的数,A~F之间的数直接减37h
jbe func5 ;0~9之间的数直接减30h
add ah,37h
JMP func6
func5: add ah,30h
jmp func6
func6: cmp al,09h
jbe func7
add al,37h
jmp disp1
func7: add al,30h
jmp disp1
;----X/Y-------------------------------------------------------------------------------
functionD:AND ax,0000h ;现将AX清零
cmp bh,39h ;现将两个操作数转换成16进制的数,A~F之间的数直接减37h
jnbe fund1 ;0~9之间的数直接减30h
sub bh,30h
jmp fund2
fund1: sub bh,37h
fund2: cmp bl,39h
jnbe fund3
sub bl,30h
jmp fund4
fund3: sub bl,37h
fund4: mov al,bh
div bl ;除法运算,商在al中,余数在ah中
cmp ah,09h ;现将商和余数转换成16进制的数,
jbe fund5
add ah,37h ;A~F之间的数直接减37h
JMP fund6
fund5: add ah,30h ;0~9之间的数直接减30h
fund6: cmp al,09h
jbe fund7
add al,37h
jmp disp2
fund7: add al,30h
jmp disp2
;----结束输出--------------------------------------------------------------------------
disp: mov ah,02h ;输出高位
int 21h
xchg dh,dl ;交换dh和dl的值
mov ah,02h ;调用2号功能输出低位
int 21h ;程序结束点,返回dos
mov ax,4c00h
int 21h
disp1: mov cl,ah ;保存低位
mov dl,al ;输出高位
mov ah,02h
int 21h
mov dl,cl
mov ah,02h ;调用2号功能输出低位
int 21h ;程序结束点,返回dos
mov ax,4c00h
int 21h
disp2: mov cl,ah ;保存余数
mov dl,al
mov ah,02h ;调用2号功能输出商
int 21h ;程序结束点,返回dos
call kongge ;输出空格
mov dl,cl
mov ah,02h ;调用2号功能输出余数
int 21h ;程序结束点,返回dos
mov ax,4c00h
int 21h
;-----定义子程序输出空格--------------------------------------------------------------
kongge proc ;定义过程,过程名为kongge
push ax
mov dl,' '
mov ah,02h
int 21h
pop ax
ret ;子程序返回
kongge endp
code ends ;代码段结束
;-------------------------------------------------------------------------------------
end start ;汇编结束,程序开始点为start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -