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

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

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

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