x86 为什么我在移动变量时总是在 al 寄存器中获取 CD

Dar*_*omz 1 x86 dos real-mode x86-16 emu8086

标题说明问题。但是基本上每次我用MOV指令用一个变量来注册寄存器显示CD。但是当我使用实际数字时,寄存器会显示数字吗?

在此处输入图片说明

mov ax, @data 是否意味着将数据段内存地址移动到 ax 寄存器,并且它是否必须专门为 ax 寄存器。或者,如果我想使用 bx 寄存器中的变量,我可以做一些类似 move mov bx, @data 的事情。请回答

为什么我必须做 mov ds, ax ds 做什么为什么我很困惑有人帮助我。

Sep*_*and 5

因为您正在使用该.model small指令,所以汇编程序会创建一个 .EXE 类型的程序。您需要更好地了解实模式分段寻址才能从 .EXE 工作。

幸运的是,还有另一种更简单的程序格式。.COM 类型的程序开始时所有的段寄存器都相等。CS= DS= ES= SS。您可以仅从偏移轻松工作。这是您学习汇编的最佳选择。

例子:

ORG 256          ;              This asks for a .COM program

mov  bl, var1    ;              Very first instruction in the program
mov  ax, var2

mov  ax, 4C00h   ; DOS.TerminateProgram
int  21h

var1  db 4       ; Byte         Place all the data below the code!
var2  dw 1000    ; Word 
Run Code Online (Sandbox Code Playgroud)

没有更多了。