【问题标题】:Assembly Code, leftover values in Data Segment汇编代码,数据段中的剩余值
【发布时间】:2013-03-14 22:43:55
【问题描述】:

我的程序有点小问题,我的程序应该使用重复加法将两个 1 字节整数相乘。

BITS 16         ;Set code generation to 16 bit mode
ORG 0x0100      ;Set code start address to 0100h


SEGMENT .text       ;Main code segment

Main:
    mov CX,[num2]                                                    
    mov AX,00
Sum:
    add AX,[num1]
    dec CX
    cmp CX,0
    je Terminate
    jmp Sum

Terminate:
    mov DL,AL
    mov AX,4C00H
    int 21H

SEGMENT .data       ;Initialised data segment
    num1 db 4
    num2 db 3

问题是当我调试我的代码时,初始值(num2)输入到CX很好,但是当num1输入到AX时,仍然有一些来自num2的剩余数据。

例如Debug

从图片中可以看出,放入 CX (3) 的值工作正常,但不是将 4 放入 AX,而是放入 304。

提前感谢您的帮助。

【问题讨论】:

  • 您使用的是哪个汇编程序? MASM?

标签: assembly nasm x86-16


【解决方案1】:

这是因为您将 16 位值加载到 AX 中,但您的 num1 值是一个字节。

  add al, [num1]

改为。

【讨论】:

  • 非常感谢您的回复,有没有办法在调试中显示 AL 寄存器以便我查看它是否有效?
  • 我不熟悉您使用的开发工具,但 AL 寄存器始终是您在调试屏幕上看到的 AX 寄存器的下半部分(当以十六进制查看时)。
猜你喜欢
  • 2015-04-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2015-03-22
  • 1970-01-01
  • 1970-01-01
  • 2012-05-09
  • 2011-08-27
相关资源
最近更新 更多