关于结构体的数据

天生水水 2015-01-07 08:18:02
题目日下: 创建一个两个域的结构体mystruct:filed1域是一个字,filed2域是一个包含20个双字的数组,不必为这些域定义初始化值
1.声明一个包含20个mystruct对象的数组
2.把ax送入数组的第一个元素的filed1中
3.使用esi寄存器寻址数组的第三个元素,并且把ax送入该元素的filed1中
4.表达式type mystruct与sizeof mystruct值
我的解答是这个
mystruct struct
filed1 word ?
filed2 dword 20 dup(?)
mystruct ends

array mystruct 20 dup(<>)
movzx ax, [mystruct ptr array].filed1

mov esi,array
mov [esi+type mystruct*2],ax

type mystruct=sizeof mystruct=82
书后面的答案是:
mystruct struct
filed1 word ?
filed2 dword 20 dup(?)
mystruct ends

array mystruct 20 dup(<>)
movzx ax,array.filed1

mov esi,array
mov [esi+type mystruct*3],ax

type mystruct=sizeof mystruct=82
对于红色标记的地方,请大神指导下,我的写法对不对。
另外对于最后一题 是否牵涉到数据对齐呢?还有如果数据对齐了,那么势必造成了内存空间的消耗,但是程序的运算效率会上升,那么在内存消耗以及效率的取舍上,该怎么办。

...全文
193 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
纵横车 2015-01-08
  • 打赏
  • 举报
回复
引用 2 楼 zara 的回复:
mov ax, array.filed1 是可以通过的,不应该用 movzx 指令,因为 ax 和 .field1 都是 word 类型的;当然了,编译器若是更随和些直接生成 mov 指令就更好了。 说的第 3 项是 *2 还是 *3 这个很有歧义,因为首项序号是 0 还是 1 的问题。如果用阿拉伯数字,倾向于以 0 为基 故 *3 ;若是如最上面那样用汉字如,首项序号为 故 *2 更合理。
那mov ax, array.filed1是算赋值给数组第一个元素的filed1还是每一个的filed1呀?
天生水水 2015-01-08
  • 打赏
  • 举报
回复
关于movzx 这个 我刚才又看了下,确实movzx是不对的 改成mov
天生水水 2015-01-08
  • 打赏
  • 举报
回复
是的 这是书后面的答案 我觉得有问题 所以向前辈们请教下
zara 2015-01-08
  • 打赏
  • 举报
回复
mov ax, array.filed1 是可以通过的,不应该用 movzx 指令,因为 ax 和 .field1 都是 word 类型的;当然了,编译器若是更随和些直接生成 mov 指令就更好了。
说的第 3 项是 *2 还是 *3 这个很有歧义,因为首项序号是 0 还是 1 的问题。如果用阿拉伯数字,倾向于以 0 为基 故 *3 ;若是如最上面那样用汉字如,首项序号为 故 *2 更合理。
纵横车 2015-01-08
  • 打赏
  • 举报
回复
哦,六个字的感谢。
zara 2015-01-08
  • 打赏
  • 举报
回复
当然只是第一个元素的了,毕竟它只是一个 mov 指令而已,不可能对多个不连续的内存单元赋值的。
纵横车 2015-01-07
  • 打赏
  • 举报
回复
movzx ax,array.filed1的写法是不行的,起码我没编译通过,而且感觉也不对的样子。另外mov [esi+type mystruct*3],ax这一句,我觉得找数组第3项不是只要*2就行了吗。还有这是书后面的答案?

21,499

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧