當前位置:編程學習大全網 - 編程語言 - 匯編19行錯了,masm 提示constant expected錯誤,但我不知道哪錯了 assum

匯編19行錯了,masm 提示constant expected錯誤,但我不知道哪錯了 assum

我看妳這個是16位編程,裏面不包含比例因素,是32位以後才有的,所以內存尋址不可用*

而且32位的比例因素只能是*1,*2,*4,*8,所以C語言的對齊選項只能是1,2,4,8

x86指令編碼問題,16位內存尋址的格式是

基址寄存器+索引寄存器+位移

基址寄存器可以是BX,BP

索引寄存器可以是SI,DI

位移是任何參數或計算後為常數。

如樓上所說的16位匯編能用乘號的地方只有字面值計算時才能使用。

詳細的可以用C寫壹段復雜語句,結果反編譯時匯編是多條語句。

匯編強大之處就在於每條指令僅執行壹個操作。分工詳細,有優化的可能性。

而且32位CPU在16位模式下依然能使用32位通用寄存器。

具體對應的代碼字節編碼是

保護模式,實地址模式,虛擬-8086?模式指令格式

═══════════════════════════════════════

指令前綴?+?操作碼?+?ModR/M?+?SIB?+?位移?+?立即數

───────────────────────────────────────

指令前綴:[opt]最多四個前綴,每個前綴?1?字節?

───────────────────────────────────────

操作碼:1,2,3?個字節

───────────────────────────────────────

ModR/M:1?個字節,若需要

───────────────────────────────────────

SIB:1?個字節,若需要

───────────────────────────────────────

位移:1,2,4?個字節或無

───────────────────────────────────────

立即數:1,2,4?個字節或無

═══════════════════════════════════════16?位?ModR/M?編碼的有效尋址

═══════════════════════════════════════

r8(/r)ALCLDLBLAHCHDHBH

r16(/r)AXCXDXBXSPBPSIDI

r32(/r)EAXECXEDXEBXESPEBPESIEDI

mm(/r)MM0MM1MM2MM3MM4MM5MM6MM7

xmm(/r)XMM0?XMM1?XMM2?XMM3?XMM4?XMM5?XMM6?XMM7

(十進制)/digit(Opcode)0?1?2?3?4?5?6?7

(二進制)REG?=?000001010011100101110111

───────────────────────────────────────

[Mod][R/M]ModR/M

───────────────────────────────────────

[BX+SI][00]?[000]?0008101820283038

[BX+DI]?[001]?0109111921293139

[BP+SI]?[010]?020A121A222A323A

[BP+DI]?[011]?030B131B232B333B

[SI][100]?040C141C242C343C

[DI][101]?050D151D252D353D

disp16?[110]?060E161E262E363E

[BX][111]?070F171F272F373F

───────────────────────────────────────

[BX+SI]+disp8?[01]?[000]?4048505860687078

[BX+DI]+disp8[001]?4149515961697179

[BP+SI]+disp8[010]?424A525A626A727A

[BP+DI]+disp8[011]?434B535B636B737B

[SI]+disp8?[100]?444C545C646C747C

[DI]+disp8?[101]?454D555D656D757D

[BP]+disp8?[110]?464E565E666E767E

[BX]+disp8?[111]?474F575F676F777F

───────────────────────────────────────

[BX+SI]+disp16?[10]?[000]?80889098A0A8B0B8

[BX+DI]+disp16?[001]?81899199A1A9B1B9

[BP+SI]+disp16?[010]?828A929AA2AAB2BA

[BP+DI]+disp16?[011]?838B939BA3ABB3BB

[SI]+disp16?[100]?848C949CA4ACB4BC

[DI]+disp16?[101]?858D959DA5ADB5BD

[BP]+disp16?[110]?868E969EA6AEB6BE

[BX][111]?878F979FA7AFB7BF

───────────────────────────────────────

EAX/AX/AL/MM0/XMM0?[11]?[000]?C0C8D0D8E0E8F0F8

ECX/CX/CL/MM1/XMM1?[001]?C1C9D1D9E1E9F1F9

EDX/DX/DL/MM2/XMM2?[010]?C2CAD2DAE2EAF2FA

ECX/BX/BL/MM3/XMM3?[011]?C3CBD3DBE3EBF3FB

ESP/SP/AH/MM4/XMM4?[100]?C4CCD4DCE4ECF4FC

EBP/BP/CH/MM5/XMM5?[101]?C5CDD5DDE5EDF5FD

ESI/SI/DH/MM6/XMM6?[110]?C6CED6DEE6EEF6FE

EDI/DI/BH/MM7/XMM7?[111]?C7CFD7DFE7EFF7FF

═══════════════════════════════════════

  • 上一篇:flash源碼怎麽架設flash開源嗎
  • 下一篇:求個數控車床編程實例帶圖片的
  • copyright 2024編程學習大全網