mov指令的限制
书中182页中有这么三行指令mov ax,0123h
mov ds:,ax
mov word ptr ds:,0
第一二行指令能不能换成
mov ds:,0123h 段寄存器和立即数之间不能用mov转移 不能直接更改段寄存器中的数据,只能是数据->通用寄存器->段寄存器 楼上两位看错了吧,那个不是传送给段寄存器,是传给内存单元,立即数传送给内存单元是被允许的,经过测试是可以的 是可以的 阿狼啊 发表于 2022-11-26 14:36
是可以的
是吗?
BriMdsGalaMoon 发表于 2022-7-25 20:21
楼上两位看错了吧,那个不是传送给段寄存器,是传给内存单元,立即数传送给内存单元是被允许的,经过测试是 ...
我也测试了,不可以
从前的编译器不能立即数到内存
sh-5.1$ cat main.s
.text
.global _start
_start:
movl $0, 0
retl
sh-5.1$ as --32 -o main.o main.s
sh-5.1$ objdump -S -M suffix main.o
main.o: file format elf32-i386
Disassembly of section .text:
00000000 <_start>:
0: c7 05 00 00 00 00 00 movl $0x0,0x0
7: 00 00 00
a: c3 retl
sh-5.1$ vim main.s
sh-5.1$ cat main.s
.code16
.text
.global _start
_start:
movw $0, 0
retw
sh-5.1$ as --32 -o main.o main.s
sh-5.1$ objdump -S -M suffix main.o
main.o: file format elf32-i386
Disassembly of section .text:
00000000 <_start>:
0: c7 06 00 00 00 00 movl $0x0,(%esi)
6: c3 retl
sh-5.1$ objdump -S -M suffix -m i8086 main.o
main.o: file format elf32-i386
Disassembly of section .text:
00000000 <_start>:
0: c7 06 00 00 00 00 movw $0x0,0x0
6: c3 retw
sh-5.1$
人造人 发表于 2022-11-26 17:06
从前的编译器不能立即数到内存
是的,我又试了一下,确实不行,是我疏忽了
页:
[1]