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

时间:2015-06-12 03:56:16

标签: assembly x86 dos

我将数字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

1 个答案:

答案 0 :(得分:3)

dl是一个8位寄存器 - axdx是16位寄存器。您可以将ax的低字节和高字节作为alah以及将dx作为dldh来访问。因此,您应使用mov dl, ax而不是mov dl,al

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

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