新手在學習intel彙編語言程序設計中的一個問題

ghost_god_like 2012-08-20 08:57:13
書中有這樣一段程式:
.data
arrayB BYTE 10h,20h,30h
.code
mov esi, OFFSET arrayB
mov al,[esi]


我的理解是:esi為32位寄存器,al是位寄存器 ,這樣可以使用mov指令嗎?

請大哥幫忙解惑,不盡感激!
...全文
66 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ghost_god_like 2012-08-20
  • 打赏
  • 举报
回复
OMG 懂了,我這個人太粗心大意了.感謝大神的指導,
非常感謝您這么有耐心的指導.
再次謝謝~~!!
大神接分吧.
zara 2012-08-20
  • 打赏
  • 举报
回复
没怎么看 #2 的回复啊,还在坚持 mov ax,[esi]等價于mov ax,esi
ghost_god_like 2012-08-20
  • 打赏
  • 举报
回复
那么也就是說
mov ax,[esi]等價于mov ax,esi
但是文中提到MOV指令的目的操作數与源操作數的尺寸必須相同
那么現在ax,esi的操作數不相同了.
還是這樣理解呢:雖然它們等價但是程式中不會出現mov ax,esi
這樣的指令
zara 2012-08-20
  • 打赏
  • 举报
回复
它说的是什么,你说的是什么啊?所以还是你想像错了。
ghost_god_like 2012-08-20
  • 打赏
  • 举报
回复
mov al,[arrayB+1]
ghost_god_like 2012-08-20
  • 打赏
  • 举报
回复
原文是這樣說的:通過在變量的地址後面加一個常數得到的表達式,如arrayB+1被稱為有效地址.有效地址以方括號括起來時就表示要對方括號內的表達式尋址以獲取該有效地址処內容.MASM并不要求一定要使用方括號,因此下面的語句是等價的:
mov al,[arrayB+]
mov al, arrayB+1
ghost_god_like 2012-08-20
  • 打赏
  • 举报
回复
首先感激大神的指點,但是書上確實是這么說的

zara 2012-08-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]書上說[esi]和esi是一樣的[/Quote]这是瞎说,或者是你没看对或是想像错了。[esi] 是指 esi 寄存器的内容作为内存地址的那个内存的值;esi 则就指 esi 这个寄存器自身。
对一般的 Masm 汇编程序来说,[1234] 和 1234 都被认为是立即数,而非通常想像上的 [1234] 中的 1234 作为内存地址,但这个不算合理的理解不能由立即数推广到寄存器上。
所以,顶楼的问题就不是问题了吧,给 al 的是 esi 指向的内存处的那个字节,而非 esi 自身。
ghost_god_like 2012-08-20
  • 打赏
  • 举报
回复
書上說[esi]和esi是一樣的

21,459

社区成员

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

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