雨轩(小宇)
2021-07-01 19:40
采纳率: 100%
浏览 13

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

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
    

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

    点赞 1 评论

相关推荐 更多相似问题