从键盘上输入任意两个不大于2位数的正整数,计算其乘积。结果在屏幕上显示。

emu8086汇编语言

从键盘上输入任意两个不大于2位数的正整数,计算其乘积。结果在屏幕上显示。

.

data segment
    string1 db "a=$";
    string2 db "b=$";
    answear db 0,0,0,0,"$";
    ansstring db "a*b=$";
ends

stack segment
    dw   128  dup(0)
ends

code segment
start:
   assume cs:code,ds:data;
    mov ax, data;
    mov ds, ax;
    mov dx,offset string1;
    mov ah,9h;
    int 21h;// output"a="
    
    mov ah,1h;
    int 21h;
    sub al,30h;
    mov bl,al;
    mov al,0ah;
    mul bl;
    mov bl,al;//get the tens
    
    mov ah,1h;
    int 21h;
    sub al,30h;
    add bl,al;//get the ones  
    
    mov ah,2;
    mov dl,0ah;
    int 21h;
    mov dl,0dh;
    int 21h;
    
    mov ax,data;
    mov ds,ax;
    mov dx,offset string2;
    mov ah,9h;
    int 21h; //output"b="
    
    mov ah,1h;
    int 21h;
    sub al,30h;
    mov cl,al;
    mov al,0ah;
    mul cl;
    mov cl,al;//get the tens
    
    mov ah,1h;
    int 21h;
    sub al,30h;
    add cl,al;//get the ones  
    
    mov ah,2;
    mov dl,0ah;
    int 21h;
    mov dl,0dh;
    int 21h;
    
    mov al,bl;
    mul cl; //answear in ax
    mov bx,0ah;
    mov cx,4;
    mov si,3; 
    ans:  
    mov dx,0000h;
    div bx;
    add dl,30h;
    mov byte ptr answear+si,dl;
    dec si;
    loop ans;
    
    mov ax,data;
    mov ds,ax;
    mov dx,offset ansstring;
    mov ah,9h;
    int 21h; //output"a*b="
    mov ax,data;
    mov ds,ax;
    mov dx,offset answear;
    mov ah,9h;
    int 21h;
    mov ah,4ch;
    int 21h;
  
ret               
ends
end start ;
  • 键盘读入的数是其ASCII码值,要减30得到真实的数值。
  • 汇编语言除法,无符号数除为DIV SRC:
    字节:(AX)/(SRC)———>(AL)商、(AH)余数
    字型:(DX:AX)/(SRC)——>(AX)商、(DX)余数
 ans:  
    mov dx,0000h;
    div bx;
    add dl,30h;
    mov byte ptr answear+si,dl;
    dec si;
    loop ans;

在这一段中,若div bx;换成div bl;,则会默认为字节除,计算时会发生溢出。

  • 还有,com中会在输出时报错“INT 21h,AH=09h-address:00000 byte 24h not found after 2000 bytes”,换成exe就好了,懵逼脸,也不知道这是为什么。
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值