⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fenzhichengxu.asm

📁 本程序是本人在学习编译原理课程时所编写的
💻 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 + -