社区
汇编语言
帖子详情
请问:movl %ecx %ebx 与movl (%ecx) %ebx 的区别?
yangzhifu
2007-11-24 09:13:46
movl %ecx %ebx
movl(%ecx %ebx
的区别?
...全文
391
5
打赏
收藏
请问:movl %ecx %ebx 与movl (%ecx) %ebx 的区别?
movl %ecx %ebx movl(%ecx %ebx 的区别?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
LovelyCboy
2007-12-03
打赏
举报
回复
DelphiGuy ----------------------正解...........
yangzhifu
2007-11-30
打赏
举报
回复
不懂!
日立奔腾浪潮微软松下联想
2007-11-25
打赏
举报
回复
mov ebx,ecx
mov ebx,[ecx]
yangzhifu
2007-11-24
打赏
举报
回复
movl %ecx %ebx
movl (%ecx) %ebx
的区别?
计算机系统基础第二次作业(1).doc
计算机系统基础第二次作业 3、对于以下AT&T格式汇编指令,根据操作数的长度确定对应指令助记符中的长度后缀, 并说明每个操作数的寻址方式。 (1)mov 8(%ebp, %
ebx
, 4), %ax (2)mov %al, 12(%ebp) (3)add ( , %
ebx
,4), %
ebx
(4)or (%
ebx
), %dh (5)push $0xF8 (6)mov $0xFFF0, %eax (7)test %cx, %cx (8)lea 8(%
ebx
, %esi), %eax 答:如下表所示: "题目编号 "长度后缀 "源操作数 "目的操作数 " "(1) "w "基址+比例变址+位移 "寄存器 " "(2) "b "寄存器 "基址+位移 " "(3) "l "比例变址 "寄存器 " "(4) "b "基址 "寄存器 " "(5) "l "立即数 "栈 " "(6) "l "立即数 "寄存器 " "(7) "w "寄存器 "寄存器 " "(8) "l "基址+变址+位移 "寄存器 " 4. 使用汇编器处理以下各行AT&T格式代码时都会产生错误,请说明每一行存在什么错误。 (1)
movl
0xFF, (%eax) (2)movb %ax, 12(%ebp) (3)addl %
ecx
, $0xF0 (4)orw $0xFFFF0, (%
ebx
) (5)addb $0xF8, (%dl) (6)
movl
%bx, %eax (7)andl %esi, %esx (8)movw 8(%ebp, , 4), %ax 答: (1)书写错误。因为源操作数是立即数0xFF,所以需要在前面加上'$' (2)由于源操作数(%ax)是16位,而长度后缀是字节'b',所以不一致,应改为'movw ' (3)目的操作数不能是立即数寻址 (4)操作数位数超过16位,而长度后缀为16位的'w',应改为'orl' (5)不能用8位寄存器作为目的操作数地址所在寄存器 (6)源操作数寄存器与目的操作数寄存器长度不一致 (7)不存在ESX寄存器 (8)源操作数地址中缺少变址寄存器 7. 假设变量x和y分别存放在寄存器EAX和
ECX
中,请给出以下每条指令执行后寄存器EDX中的 结果。 (1)leal (%eax), %edx (2)leal 4(%eax, %
ecx
), %edx (3)leal (%eax, %
ecx
, 8), %edx (4)leal 0xC(%
ecx
, %eax, 2), %edx (5)leal ( , %eax, 4), %edx (6)leal (%eax, %
ecx
), %edx 答: (1)R[edx]=x //把eax的值放到edx中去 (2)R[edx]=x+y+4 //把eax+
ecx
+4的值放到edx中去 (3)R[edx]=x+8*y //把eax+8*
ecx
的值放到edx中去 (4)R[edx]=y+2*x+12 //把
ecx
+2*eax+12的值放到edx中去 (5)R[edx]=4*x //把4*eax的值放到edx中去 (6)R[edx]=x+y //把eax+
ecx
的值放到edx中去 8.假设以下地址以及寄存器中存放的机器数如下表所示 "地址 "机器数 "寄存器 "机器数 " "0x8049300 "0xfffffff0 "EAX "0x8049300 " "0x8049400 "0x80000008 "
EBX
"0x100 " "0x8049384 "0x80f7ff00 "
ECX
"0x10 " "0x8049380 "0x908f12a8 "EDX "0x80 " 分别说明执行以下指令或寄存中的内容交发生改变?改变后的内容是什么条件标志OF 、 SF 、 ZF 和 CF 会发生什么改变。 (1)指令功能为:R[edx] R[edx]+M[R[eax]]=0x00000080+M[0x8049300],寄存器EDX中内 容改变。改变后的 内容为以下运算的结果:00000080H+FFFFFFF0H 0000 0000 0000 0000 0000 0000 1000 0000 + 1111 1111 1111 1111 1111 1111 1111 0000 _______________________________________________ 1 0000 0000 0000 0000 0000 0000 0111 0000 因此,EDX中的内容改变为0x00000070。根据表3.5可知,加法指令会影响OF、SF、ZF和 CF标志。OF=0,ZF=0,SF=0,CF=1。 (2)指令功能为:R[
ecx
] R[
ecx
]-M[R[eax]+R[
ebx
]]=0x00000010+M[0x8049400]
计算机系统基础第二次作业.doc
计算机系统基础第二次作业 计算机系统基础第二次作业 3、对于以下AT&T格式汇编指令,根据操作数的长度确定对应指令助记符中的长度后缀, 并说明每个操作数的寻址方式。 (1)mov 8(%ebp, %
ebx
, 4), %ax (2)mov %al, 12(%ebp) (3)add ( , %
ebx
,4), %
ebx
(4)or (%
ebx
), %dh (5)push $0xF8 (6)mov $0xFFF0, %eax (7)test %cx, %cx (8)lea 8(%
ebx
, %esi), %eax 答:如下表所示: "题目编号 "长度后缀 "源操作数 "目的操作数 " "(1) "w "基址+比例变址+位移 "寄存器 " "(2) "b "寄存器 "基址+位移 " "(3) "l "比例变址 "寄存器 " "(4) "b "基址 "寄存器 " "(5) "l "立即数 "栈 " "(6) "l "立即数 "寄存器 " "(7) "w "寄存器 "寄存器 " "(8) "l "基址+变址+位移 "寄存器 " 4. 使用汇编器处理以下各行AT&T格式代码时都会产生错误,请说明每一行存在什么错误。 (1)
movl
0xFF, (%eax) (2)movb %ax, 12(%ebp) (3)addl %
ecx
, $0xF0 (4)orw $0xFFFF0, (%
ebx
) (5)addb $0xF8, (%dl) (6)
movl
%bx, %eax (7)andl %esi, %esx (8)movw 8(%ebp, , 4), %ax 答: (1)书写错误。因为源操作数是立即数0xFF,所以需要在前面加上'$' (2)由于源操作数(%ax)是16位,而长度后缀是字节'b',所以不一致,应改为'movw ' (3)目的操作数不能是立即数寻址 (4)操作数位数超过16位,而长度后缀为16位的'w',应改为'orl' (5)不能用8位寄存器作为目的操作数地址所在寄存器 (6)源操作数寄存器与目的操作数寄存器长度不一致 (7)不存在ESX寄存器 (8)源操作数地址中缺少变址寄存器 7. 假设变量x和y分别存放在寄存器EAX和
ECX
中,请给出以下每条指令执行后寄存器EDX中的 结果。 (1)leal (%eax), %edx (2)leal 4(%eax, %
ecx
), %edx (3)leal (%eax, %
ecx
, 8), %edx (4)leal 0xC(%
ecx
, %eax, 2), %edx (5)leal ( , %eax, 4), %edx (6)leal (%eax, %
ecx
), %edx 答: (1)R[edx]=x //把eax的值放到edx中去 (2)R[edx]=x+y+4 //把eax+
ecx
+4的值放到edx中去 (3)R[edx]=x+8*y //把eax+8*
ecx
的值放到edx中去 (4)R[edx]=y+2*x+12 //把
ecx
+2*eax+12的值放到edx中去 (5)R[edx]=4*x //把4*eax的值放到edx中去 (6)R[edx]=x+y //把eax+
ecx
的值放到edx中去 8.假设以下地址以及寄存器中存放的机器数如下表所示 "地址 "机器数 "寄存器 "机器数 " "0x8049300 "0xfffffff0 "EAX "0x8049300 " "0x8049400 "0x80000008 "
EBX
"0x100 " "0x8049384 "0x80f7ff00 "
ECX
"0x10 " "0x8049380 "0x908f12a8 "EDX "0x80 " 分别说明执行以下指令或寄存中的内容交发生改变?改变后的内容是什么条件标志OF 、 SF 、 ZF 和 CF 会发生什么改变。 (1)指令功能为:R[edx] R[edx]+M[R[eax]]=0x00000080+M[0x8049300],寄存器EDX中内 容改变。改变后的 内容为以下运算的结果:00000080H+FFFFFFF0H 0000 0000 0000 0000 0000 0000 1000 0000 + 1111 1111 1111 1111 1111 1111 1111 0000 _______________________________________________ 1 0000 0000 0000 0000 0000 0000 0111 0000 因此,EDX中的内容改变为0x00000070。根据表3.5可知,加法指令会影响OF、SF、ZF和 CF标志。OF=0,ZF=0,SF=0,CF=1。 (2)指令功能为:R[
ecx
] R[
ecx
]-M[R[eax]+R[
ebx
]]=0x00000010
寻址方式和64位系统编译32位汇编程序会出现段错误的解决方法_2021-07-03
直接寻址方式:
movl
ADDRESS, %EAX 将地址ADDRESS里的值加载到%eax 索引须知方式:
movl
string_start(,%
ecx
,1), %eax 从string_start处开始,将该地址于1*%
ecx
相加,并将所得值加载到%eax 间接寻址方式:
movl
(%eax), %
ebx
将%eax里的值加载到%
ebx
基址寻址方式:
movl
4(%eax), %
ebx
将%eax + 4加载到%
ebx
立即数寻址方式:
movl
$12
深入理解计算机 - 第三章 程序的机器级表示 练习题3.10
寄存器用法 寄存器 变量 初值 %esi x x %
ebx
y y %
ecx
n n
movl
8(%ebp), %esi // get x
movl
12(%ebp), %
ebx
// get y
movl
16(%ebp), %
ecx
// get n .L6: imuli %
ecx
, %
ebx
// y * x -> y addl %
ecx
, %esi // x + n -> x decl %
ecx
// n - 1 -> n testl ...
《操作系统》by李治军 | 实验5.pre - switch_to 汇编代码详解
《操作系统》by李治军 | 实验5.pre - switch_to 汇编代码详解
汇编语言
21,458
社区成员
41,601
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章