531035528 发表于 3 天前

3.2 mov al,[0]为传送字节,mov ax,[0]为什么不可是传送

mov al, 为传送字节
mov ax, 为什么不能看成传送字节单元,而是传送字单元????

FishC 发表于 3 天前

关键:看操作数本身是几位。

AL 是 8 位寄存器,所以 mov al, ... 是传送一个字节。

AX 是 16 位寄存器,所以 mov ax, ... 是传送一个字,也就是 16 位。

虽然 AX 可以拆成 AH 和 AL,但汇编器看到的是 AX 这个整体,不是两个独立的字节单元。指令宽度由寄存器或内存操作数类型决定。

mov al, 12h   ; 8位,只送 AL
mov ah, 34h   ; 8位,只送 AH
mov ax, 1234h ; 16位,一次送整个 AX


对内存也是这样:

mov al, ; 取 1 个字节到 AL
mov ax, ; 取 1 个字,也就是 2 个字节到 AX


mov ax, 不是“传送字节单元”,而是从 开始取两个连续字节:低字节送到 AL,高字节送到 AH。

所以记住:
AL 是字节,AX 是字。
想按字节操作,就用 AL 或 AH;用 AX,它就是字传送。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

531035528 发表于 3 天前

知道了,谢谢

FishC 发表于 3 天前

531035528 发表于 2026-10-08 16:48
知道了,谢谢

不客气,继续加油!有问题随时来问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

531035528 发表于 3 天前

FishC 发表于 2026-10-8 16:21
关键:看操作数本身是几位。

AL 是 8 位寄存器,所以 mov al, ... 是传送一个字节。


收到,谢谢

FishC 发表于 3 天前

531035528 发表于 2026-10-08 16:51
FishC 发表于 2026-10-8 16:21
关键:看操作数本身是 ...

不客气,继续加油! 有问题随时来问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

531035528 发表于 3 天前

FishC 发表于 2026-10-8 16:21
关键:看操作数本身是几位。

AL 是 8 位寄存器,所以 mov al, ... 是传送一个字节。


请问内在操作数类型,指的是什么??

FishC 发表于 3 天前

531035528 发表于 2026-10-08 16:59
FishC 发表于 2026-10-8 16:21
关键:看操作数本身是 ...

你问的应该是“内存操作数类型”。

它指的是:CPU 这次访问内存时,把那个地址里的数据当成多大来读或写。常见的有:

字节:8 位
字:16 位
双字:32 位

内存地址本身只表示“从哪开始”,不表示“取几个字节”。所以类型要由指令里的寄存器、另一个操作数,或者显式说明来决定。


mov al,    ; 是字节类型,取 1 字节到 AL
mov ax,    ; 是字类型,取 2 字节到 AX
mov , al   ; 是字节类型,写 1 字节
mov , ax   ; 是字类型,写 2 字节


如果两边都看不出大小,就要显式写:


mov byte ptr , 1   ; 按字节写
mov word ptr , 1   ; 按字写


所以“内存操作数类型”就是:这次访问内存,是访问 1 个字节、2 个字节,还是 4 个字节等。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

531035528 发表于 3 天前

FishC 发表于 2026-10-8 16:59
你问的应该是“内存操作数类型”。

它指的是:CPU 这次访问内存时,把那个地址里的数据当成多大来读 ...

谢谢

FishC 发表于 3 天前

531035528 发表于 2026-10-08 17:10
FishC 发表于 2026-10-8 16:59
你问的应该是“内存操 ...

不客气,继续加油!有问题随时来问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 3.2 mov al,[0]为传送字节,mov ax,[0]为什么不可是传送