雨轩(爵丶迹) 2021-07-01 19:40 采纳率: 100%
浏览 184
已采纳

汇编语言求两个两位数的乘积

有没有会求两个两位数的乘积或者两个三位数的乘积

  • 写回答

1条回答 默认 最新

  • CSDN专家-黄老师 2021-07-02 09:00
    关注
    DATAS SEGMENT
        ;此处输入数据段代码
        x db 2 dup(?) 
        y db 2 dup(?)
        z dw ?
        mess1 db 'Please enter two double digits, each ending with enter:',0ah,0dh,'$'
        mess2 db 0ah,0dh,'result=$'
    DATAS ENDS
    
    STACKS SEGMENT
        ;此处输入堆栈段代码
    STACKS ENDS
    
    CODES SEGMENT
        ASSUME CS:CODES,DS:DATAS,SS:STACKS
    START:
        MOV AX,DATAS
        MOV DS,AX
        ;此处输入代码段代码
        ;只能支持两位数的乘法!!!
    input1 macro opr1                ;输入宏-X
        mov cx,1h
        mov si,0h
    let1:
        mov ah,1h
        int 21h
        cmp al,0dh
        je let2
        sub al,30h
        mov opr1[si],al
        inc si
        jmp let1
    let2:
        loop let1
    endm
    input2 macro opr2                ;输入宏-Y
        mov cx,1h
        mov si,0h
    let3:
        mov ah,1h
        int 21h
        cmp al,0dh
        je let4
        sub al,30h
        mov opr2[si],al
        inc si
        jmp let3
    let4:
        loop let3
    endm
    mulxy macro op1,op2,op3            ;运算宏
        mov bx,0h
        mov al,op1[0]
        mov bl,op1[1]
        mov cl,0ah
        mul cl
        add ax,bx                    ;ax中存的是x的真值
        push ax                        ;x暂存起来
        mov ax,0h
        mov bx,0h
        mov al,op1[0]
        mov bl,op1[1]
        mov cl,0ah
        mul cl
        add ax,bx                    ;目前ax存放y的真值
        mov bx,0h
        pop bx
        mul bx                        ;x*y运算结果放入ax中
        mov z,ax
    endm
    output1 macro op                ;输出宏
        mov ax,0h
        mov bx,0h
        mov dx,0h
        mov cx,0h
        mov ax,op
        mov bx,0ah
    let5:
        div bx
        push dx                        ;存余数
        mov dx,0h
        inc cx
        cmp ax,0h
        jnz let5
    let6:
        mov ah,2h
        pop dx
        add dx,3030h
        int 21h
        loop let6
    endm
        lea dx,mess1                ;提示信息
        mov ah,9h
        int 21h
        
        input1 x
        input2 y
        mulxy x,y,z                    ;结果在Z中
        
        lea dx,mess2                ;提示信息
        mov ah,9h
        int 21h
        ;输出结果时是将运算结果除以十然后余数入栈
        ;最后弹出余数调用dos系统2号功能依次输出结果
        output1 z
        MOV AH,4CH
        INT 21H
    CODES ENDS
        END START
    

    如果对你有帮助,可以点击我这个回答右上方的【采纳】按钮,给我个采纳吗,谢谢

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 怎么获取下面的: glove_word2id.json和 glove_numpy.npy 这两个文件
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug