微机原理汇编实验一:数值计算程序设计

要求

从键盘输入2个数X1和X2,然后再输入计算符号(+或*),按输入的符号进行计算,结果放在X3,并输出到屏幕显示。输入“+”号,程序计算X3=X1+X2, 输入“*”号计算X3=X1 * X2

思路

定义数据段变量x1,x2,x3分别存储数据,再定义input、output保存输入的ASCII码值、输出的十进制数;
程序从键盘读入的数据(十进制)是以十进制存入的(即存入的是图形),要进行运算就需要将数据转换为二进制储存到寄存器中;
同样,数据输出到屏幕时,需先将数据转换成ASCII码十进制显示;
因此,定义了两个函数ASCB、BASC,方便调用

实现

data segment
input  db  10,0,10 dup(30h)    ;输入的数据ascii码
x1  dw        0
x2  dw        0
x3  dw        0
output  db     5 dup(30h),'$'
mes1  db    'input first number',0ah,0dh,'$'
mes2  db    'input second number',0ah,0dh,'$'
mes3  db    'input computing symbol(+ or *) ',0ah,0dh,'$'
mes4  db    0ah,0dh,' computing result =','$'
data ends
code segment  
    assume cs:code,ds:data,ss:stacks
main proc
    mov ax, data
    mov ds, ax    
    
    ;第一个数字
    mov dx,offset mes1
    mov ah,09h
    int 21h
    
    mov dx,offset input
    mov ah,0ah
    int 21h
    
    mov ch,00h
    mov cl,input+1
    cmp cl,05h
    jc l1
    mov cl,05h
l1: 
    mov si,offset input+2
    call ascb
    mov x1,ax
    
    mov dl,0ah                ;回车
    mov ah,2                  
    int 21h 
    mov dl,0dh                ;换行
    mov ah,2                  
    int 21h
    
    ;第二个数字
    mov dx,offset mes2
    mov ah,09h
    int 21h
    
    mov dx,offset input
    mov ah,0ah
    int 21h
    
    mov ch,00h
    mov cl,input+1
    cmp cl,05h
    jc l2
    mov cl,05h
l2:
    mov si,offset input+2
    call ascb
    mov x2,ax 
    
    mov dl,0ah                ;回车
    mov ah,2                  
    int 21h 
    mov dl,0dh                ;换行
    mov ah,2                  
    int 21h
     
    mov dx,offset mes3
    mov ah,09h
    int 21h
    
    
    ;输入运算符
    mov ah,1
    int 21h
    
    cmp al,'*'
    je mulnum
    
    ;计算
addnum:    
    mov ax,x1
    add ax,x2
    mov x3,ax
    mov dx,ax
    mov si,offset output
    call basc
    jmp done
    
mulnum:
    mov ax,x1
    mov bx,x2
    mul bx
    mov x3,ax  
    mov dx,ax
    mov si,offset output
    call basc

done:    
    mov dx,offset mes4
    mov ah,09h
    int 21h
    
    mov dx,offset output
    mov ah,09h
    int 21h
    
    mov ah,7
    int 21h
    
    mov ax, 4c00h     ;程序返回
    int 21h    
main endp

ascb proc
    dec cl
    mov bx,000ah
    mov ah,00h
    mov al,[si]
    sub al,30h
a1:  
    imul bx
    mov dx,[si+01]
    and dx,00ffh
    add ax,dx
    sub ax,30h
    inc si
    loop a1
    ret
endp

basc proc
    add si,5
a2:  
    dec si
    mov ax,dx
    mov dx,0000h
    mov cx,000ah
    div cx
    xchg ax,dx
    add al,30h
    mov [si],al
    cmp dx,0000h
    jnz a2
    ret
endp
code ends
end main
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值