『壹』 這段匯編代碼是什麼意思,賦值過來又賦值過去的,怎麼找到esi edi的來源呢
這就是內存拷貝啊
esi指向原內存首地址,edi指向目標內存首地址,
esi和edi應該是運行是確定的,用gdb調試一下就知道是什麼值了
『貳』 游戲尋找二級基址出現這個mov [esi+edi*4+0000016C],ebx是什麼意思
二維數組,一般可以遍歷到有用的數據
『叄』 匯編指令 rep movs dword ptr es:[edi],dword ptr ds:[esi]
rep:重復執行指令復
rep movs dword ptr es:[edi],dword ptr ds:[esi]
意思就是制將ESI指向的地址的值以4位元組方式拷貝到EDI指向的地址中,重復執行ECX次,每次執行後ESI+4,EDI+4,ECX-1,OD中在這段代碼中下斷後按F7單步步入就可以觀察到這3個寄存器的變化
『肆』 MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]什麼意思
DWORD PTR ES:[EDI],將來ES:[EDI]這個內存強制轉換為源dword雙字類型,PTR就是轉換符,DWORD為雙字類型,在匯編中有BYTE,WORD,DWORD幾種變數類型,分別對應1,2,4個位元組。
整個語句的意思就是把
DWORD PTR DS:[ESI】內存單元的值傳送到DWORD PTR ES:[EDI]單元保存,因為內存單元一般是2個位元組的,這里強制轉換為4個位元組!
MOV 就是傳送子令
『伍』 兩道程序閱讀題《微機原理及介面技術》
下段程序執抄行後,ESI= (1) ,EDI= (2) ,CF= (3)
mov esi,8899h;esi 1000 1000 1001 1001
mov edi,esi;edi 1000 1000 1001 1001
or esi,0; or 0000 0000 0000 0000 esi 1000 1000 1001 1001
sub edi,8811h; edi 8899-8811=0088h cf=0
esi=8899h
edi=0088h
cf=0
(1)(2)(3)只能填一條指令的話,不會做。。
『陸』 麻煩找出匯編語言中這個指令的錯誤:mov [esi],[edi]
MOV指令中,源操作數和目的操作數不能同時為存儲器操作數。
『柒』 MOV [EDI+ESI],10H可以嗎
不可以
1.操作數寬度不明
2.基址/變址寄存器不能同時出現在統一操作數定址
『捌』 edi,esi寄存器是什麼寄存器有什麼作用
EDI和ESI分別是16位寄存器DI和SI的32位擴展
它們是目的變址寄存器和源變址寄存器,用於串操作指令中。
同時,它們也可以作為通用寄存器使用。
『玖』 匯編語言 esi,edi寄存器問題
都屬於通用寄存器,所以一般場景下都可以隨便用。就是有些傳送指令規定了esi是源,edi是目的
『拾』 匯編中eax,ecx,edx,ebx,esp,ebp,esi,edi,eip分別是什麼有什麼用
這些來是32位的CPU中32位的寄存器的名字自。
寄存器是CPU內部的用於運行中暫存數據的存儲單元。
在PC用的16位CPU 8086、8088中,寄存器的名字分別是AX(累加器),BX(基址寄存器),CX(計數寄存器),DX(數據寄存器),SP(堆棧指針),BP(基址指針),SI(源變址寄存器),DI(目的變址寄存器),IP(指令指針),等等……
這些寄存器除了從名字可以看得出來的用途以外,一部分寄存器也可以作為通用的一般數據寄存使用。具體每個寄存器的功能要與各種具體的指令關聯起來才能理解清楚。
在386以上的32位CPU中,這些寄存器擴展成了32位的,名字就是在原來16位的名字前面加一個字母E,變成了EAX,EBX,…………