AT&T格式的彙編與Intel格式的彙編尋址方式的不同

AT&T: immed32(basepointer, indexpointer, indexscale)

Intel: [basepointer + indexpointer × indexscale + imm32)

如果操作系統工作於保護模式下,用的是32位線性地址,所以在計算地址時不用考慮segment:offset的問題。上式中的地址應爲:imm32 + basepointer + indexpointer × indexscale

EX:

  • 直接尋址
    AT&T: foo Intel: [foo]
    foo是一個全局變量。注意加上$是表示地址引用,不加是表示值引用。對於局部變量,可以通過堆棧指針引用。

  • 寄存器間接尋址
    AT&T: (%eax) Intel: [eax]

  • 變址尋址
    AT&T: _variable(%eax) Intel: [eax + _variable]
    AT&T: _array( ,%eax, 4) Intel: [eax × 4 + _array]
    AT&T: _array(%ebx, %eax,8) Intel: [ebx + eax × 8 + _array]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章