assembly 递增和递减相同数量的TASM

zphenhs4  于 2023-01-17  发布在  其他
关注(0)|答案(2)|浏览(158)

我已经做了这个代码,增加我输入的数字,但是我有麻烦让它减少我输入的数字。我想把数字从DL移到BL,然后DEC它,只是再次显示它,但是它只给我我输入的第一个数字,而不是DEC的。

.model small
.stack 200h
.data
mesaj1 db 13,10, "Introduceti un numar: $"
mesaj2 db 13,10, "Numarul incrementat este: $"
mesaj3 db 13,10, "Numarul decrementat este: $"
.code
main proc
    mov ax, @data
    mov ds, ax
    
    mov dx, offset mesaj1 
    mov ah,09h
    int 21h
    
    mov ah,01h            
    int 21h
    
    sub al,48     
    mov bl,al
    
    inc bl       
    add bl,48
    
    mov dx, offset mesaj2
    mov ah,09h
    int 21h
    
    mov dl,bl         ;
    mov ah,02h
    int 21h
    
    mov bl,al
    dec bl
    
    mov dx, offset mesaj3
    mov ah,09h
    int 21h
    
    mov dl,bl
    mov ah,02h
    int 21h
    
    mov ah, 4ch
    int 21h
    main endp
end main

这是它给我的1,我假设它德克斯的INC的数字,而不是我键入的。
试着把我放进DL的东西移回BL,DEC它,然后显示它,但我猜它不像那样工作。

bxgwgixi

bxgwgixi1#

操作的顺序很重要!

  1. BL是输入的数字[0,9]
    1.显示器 * 测量值j2 *
    1.将BL递增移动到DL
    1.显示编号
    1.显示器 * 测量值j3 *
    1.将BL递减移入DL
    1.显示编号
    代码:
mov  dx, offset mesaj2
mov  ah, 09h
int  21h

mov  dl, bl
add  dl, 48 + 1
mov  ah, 02h
int  21h

mov  dx, offset mesaj3
mov  ah, 09h
int  21h

mov  dl, bl
add  dl, 48 - 1
mov  ah, 02h
int  21h

替代代码(短4个字节):

mov  dx, offset mesaj2
mov  ah, 09h
int  21h

lea  dx, [bx + 48 + 1]
mov  ah, 02h
int  21h

mov  dx, offset mesaj3
mov  ah, 09h
int  21h

lea  dx, [bx + 48 - 1]
mov  ah, 02h
int  21h
qeeaahzv

qeeaahzv2#

好的,我想出来了,我只是在移动bl,al的时候放了一个mov cl,al,为了保存它,然后在我递增它之后,我做了同样的事情,但是用cl代替bl,然后DEC。

相关问题