如何在 Assembly (tasm) 的 ax 和 dx 中显示结果和余数

How do I display the result and remainder in ax and dx in Assembly (tasm)

我有数字 10 除以 10,我希望显示 ax 和 dx 中的值,但 TASM 不允许我将 ax 和 dx 移动到 dl 中并排显示它们

    .model small
    .stack 100h
    .data
    Integer dw 5h
    Numbre dw 5h
    .code
    Start:
    mov ax,@data
    mov ds,ax
    mov ax,Integer
    mov bx,Numbre
    add ax,bx
    mov cx,10h
    mov dx,0h
    jmp compare
    compare : cmp ax,09
        ja divide
        jbe display_result
    divide : div cx
        add ax,"0"
        add dx,"0"
        jmp display_result_large
    display_result : add ax,"0"
        mov dl,ax
        mov ah,2h
        int 21h
        jmp endall
    display_result_large : mov dl,ax
        mov ah,2h
        int 21h
        mov dl,dx
        mov ah,2h
        int 21h
        jmp endall
    endall : mov ah,4ch
        int 21h
        end Start

dl 是一个 8 位寄存器 - axdx 是 16 位寄存器。您可以访问 ax 的低字节和高字节,如 alah,以及 dx 的低字节和高字节,如 dldh。所以你应该使用 mov dl,al.

而不是 mov dl, ax

指令mov dl,dx将被mov dl,dl取代,但那将是一个毫无意义的操作。但是,由于您在 mov dl,al 时更改了 dl 的值,因此您必须以某种方式保存和恢复它。最简单的方法是使用堆栈:

display_result_large :
    push dx    ; save dx on the stack
    mov dl,al
    mov ah,2h
    int 21h
    pop dx    ; restore dx's old value. the low byte of dx is dl, so
              ; the character is already in the correct register.
    mov ah,2h
    int 21h
    jmp endall