在' ecx'我有一些字符串,比如" abc"。
mov啊,byte ptr [ecx + 0]
mov al,byte ptr [ecx + 1]
它究竟做了什么?它就像在'啊'我有" a" char和in' al'我有" b"炭?
答案 0 :(得分:2)
byte ptr
表示内存操作数是指内存中的一个字节,而不是字或双字。通常,这可以省略,因为汇编程序可以从使用的寄存器中推断出操作数大小,但有一些指令如mov [eax],0
,其中无法推断出大小,因此byte ptr
,word ptr
或{ <1}}需要前缀。
答案 1 :(得分:1)
有些时候我们需要协助汇编程序翻译对内存中数据的引用。
byte ptr
- &gt;它只是意味着你想从地址中获取一个字节。
如果它说word ptr
或dword ptr
,您会从源索引中的地址获得一个单词或双字。
当您需要类似byte ptr
示例的内容时,您将立即值移动到间接地址:
mov ebx, OFFSET some_symbol ; or a pointer from another register
mov [ebx], 10
通常不允许这样做 - 汇编程序不知道您是要将10作为byte
,word
,双字还是(在64位代码中) )四字。 You need to make it explicit,尺寸规格为:
mov byte ptr [ebx], 10 ; write 10 into a byte
mov word ptr [ebx], 10 ; write 10 into a word
mov dword ptr [ebx], 10 ; write 10 into a dword