雨轩(爵丶迹) 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 AE SDK插件开发,获取关键帧值得问题
  • ¥20 基于spring boot、的scorm
  • ¥15 往复密封问题的两个问题
  • ¥15 DAC函数和STM32
  • ¥15 任务是接收数据并把数据写入DAC7311,这些代码能实现此功能吗
  • ¥15 分析FP -Growth代码运行内存太大而无法运行的原因
  • ¥20 qtcreat 使用msvc编译器开发软件运行时字体锯齿感严重
  • ¥15 为何显示keyerror fruit
  • ¥15 imageware粗糙度表面
  • ¥15 为什么我的uibot导入py模块出错呀。py文件放在了uibot里对应的python文件夹了,卸了重安也不行