【问题标题】:Trying to use aaa instruction尝试使用 aaa 指令
【发布时间】:2015-08-16 09:25:43
【问题描述】:

我是组装新手,正在使用 TASM。我正在尝试使用aaa 指令,但无论我做什么,我似乎都做不到。我正在添加82,并且我已经阅读了一些关于aaa 的内容,但无论我做什么,我似乎都无法打印字符10

这是我的代码:

.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

【问题讨论】:

  • 您的程序不会在stdout 上打印任何内容,因此您不能期望看到显示的结果。要跟踪程序的结果,请使用gdb 或任何能够单步执行程序的调试器。
  • 我想我已经打印了字符,是mov啊,02指令
  • 啊,你在 Windows 下……我以为你在 Linux 下。你应该指定这个。
  • 来自英特尔的手册:“二进制编码的十进制整数(BCD 整数)是无符号的 4 位整数,有效值范围为 0 到 9”'8''2' 都不在 0 到 9 的范围内。

标签: assembly dos tasm


【解决方案1】:

Int 21/AH=02h 是一个不保留AX 寄存器的函数。您必须存储结果并在需要时获取它。注意不要通过更改AHAL 来破坏AX

.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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 1970-01-01
    • 2021-04-01
    • 2021-01-01
    相关资源
    最近更新 更多