2015-08-16 5 views
-2

Я новичок в сборке и пользуюсь TASM. Я пытаюсь использовать инструкцию aaa, но что бы я ни делал, я не могу это сделать. Я добавляю 8 и 2, и я кое-что прочитал о aaa, но что бы я ни делал, я не могу напечатать символы 1 и 0.Пытается использовать инструкцию aaa

Вот мой код:

.model small 

.stack 

.data 

.code 
main proc 

    mov ax, @data 
    mov ds, ax 

    mov ah, 0 
    mov al, '8' 
    add al, '2' 

    aaa 
    or ax, 3030h 

    mov ah, 02 
    mov dl, ah 
    int 21h 

    mov ah, 02 
    mov dl, al 
    int 21h 

    mov ax, 4c00h 
    int 21h 

    main endp 
end main 
+0

Ваша программа ничего не печатает на 'stdout', поэтому вы не можете ожидать, что результат будет разложен. Чтобы отследить результаты вашей программы, используйте 'gdb' или любой отладчик, который может выполнить программу. – perror

+0

@perror: http://www.ctyme.com/intr/rb-2554.htm – rkhb

+0

Я думаю, что я напечатал персонажа, это mov ah, 02 инструкция – random

ответ

2

Int 21/AH=02h это функция, которая не сохраняет AX регистра. Вы должны сохранить свой результат и получить его, когда вам это нужно. Будьте осторожны, чтобы не уничтожить AX, изменив код: AH или AL!

.model small 

.stack 100h 

.data 

    hold dw ? 

.code 
main proc 

    mov ax, @data 
    mov ds, ax 

    mov ah, 0 
    mov al, 8 
    add al, 2 

    aaa 
    or ax, 3030h 
    mov hold, ax 

    mov ax, hold 
    mov dl, ah 
    mov ah, 02 
    int 21h 

    mov ax, hold 
    mov dl, al 
    mov ah, 02 
    int 21h 

    mov ax, 4c00h 
    int 21h 

    main endp 
end main 
+0

Wow. Вы отлично ответили. Спасибо – random

 Смежные вопросы

  • Нет связанных вопросов^_^