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

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

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

  • 写回答

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 springboot接入微信支付SDK
  • ¥50 大区域的遥感影像匹配 怎么做啊
  • ¥15 求解答:pytorch跑yolov8神经网络受挫
  • ¥20 Js代码报错问题不知道怎么解决
  • ¥15 gojs 点击按钮node的position位置进行改变,再次点击回到原来的位置
  • ¥15 计算决策面并仿真附上结果
  • ¥20 halcon 图像拼接
  • ¥15 webstorm上开发的vue3+vite5+typeScript打包时报错
  • ¥15 vue使用gojs,需求在link中的虚线上添加方向箭头
  • ¥15 CSS通配符清除内外边距为什么可以覆盖默认样式?