与数据相关的运算符和伪指令 offset align ptr type lengthof sizeof label 间接寻址 间接操作数 数组 变址操作数 指针 jmp, loop
生活随笔
收集整理的這篇文章主要介紹了
与数据相关的运算符和伪指令 offset align ptr type lengthof sizeof label 间接寻址 间接操作数 数组 变址操作数 指针 jmp, loop
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
與數(shù)據(jù)相關(guān)的運算符和偽指令
offset
- 數(shù)據(jù)標號的偏移量,按字節(jié)計算,表示數(shù)據(jù)標號到數(shù)據(jù)段開始的距離
align
- 將一個變量對齊到字節(jié)邊界、字邊界、雙字邊界或段落邊界
- align bound[1, 2, 4, 8, 16]
- 1:下一個變量對齊于1字節(jié)邊界(默認);2:下一個變量對齊于偶數(shù)地址;4:下一個變量地址為4的倍數(shù);…
ptr
- 重寫一個已經(jīng)被聲明過的操作數(shù)的大小類型
type
變量單個元素的大小,按字節(jié)計算
.data var1 byte ? ; type var1: 1 var2 word ? ; type var2: 2 var3 dword ? ; type var3: 4 var4 qword ? ; type var4: 8lengthof
- 計算數(shù)組中元素的個數(shù),元素是由數(shù)組標號同一行出現(xiàn)的數(shù)值定義的
sizeof:lengthof與type的乘積
.data intArray word 32 dup(0) .code mov eax, sizeof intArray ; eax = 64label
- 插入一個標號,并定義它的大小屬性,但不為其分配存儲空間
間接尋址
間接操作數(shù)
.data byteVal byte 10h .code mov esi, offset byteVal mov al, [esi] ; al = 10h ; mov [esi], bl ;; ptr 與間接操作數(shù)一起使用 ; inc [esi] ; 操作數(shù)必須有大小 inc byte ptr [esi]數(shù)組
.data arrayB byte 10h, 20h, 30h .code mov esi, offset arrayB mov al, [esi] ; al = 10h inc esi mov al, [esi] ; al = 20h inc esi mov al, [esi] ; al = 30h.data arrayW word 1000h, 2000h, 3000h .code mov esi, offset arrayW mov ax, [esi] ; ax = 1000h add esi, 2 mov ax, [esi] ; ax = 2000h add esi, 2 mov ax, [esi] ; ax = 3000h.data arrayD dword 10000h, 20000h, 30000h .code mov esi, offset arrayW mov ax, [esi] ; ax = 10000h add esi, 4 mov ax, [esi] ; ax = 20000h add esi, 4 mov ax, [esi] ; ax = 30000h變址操作數(shù)
constant[reg]
[constant + reg]
.data arrayB byte 10h, 20h, 30h .code mov esi, 0 mov al, arrayB[esi] ; al = 10h; 增加位移量 .data arrayW word 1000h, 2000h, 3000h .code mov esi, offset arrayW mov ax, [esi] ; ax = 1000h mov ax, [esi + 2] ; ax = 2000h mov ax, [esi + 4] ; ax = 3000h;;; 使用16位寄存器:si, di, bx, bp mov al, arrayB[si] mov ax, arrayW[di] mov eax, arrayD[bx] ; 避免使用bp,除了尋址堆棧數(shù)據(jù); 變址操作數(shù)中的比例因子 .data arrayD dword 100h, 200h, 300h, 400h .code mov esi, 3 * type arrayD ; arrayD[3]的偏移量 mov eax, arrayD[esi] ; eax = 400h ; mov esi, 3 ; mov eax, arrayD[esi * 4] ; mov esi, 3 ; mov eax, arrayD[esi * type arrayD]指針
.data arrayB byte 10h, 20h, 30h, 40h arrayW word 1000h, 2000h, 30000h ; ptrB dword arrayB ; ptrW dword arrayW ptrB dword offset arrayB ptrW dword offset arrayW-
使用typedef 運算符
- 創(chuàng)建用戶定義類型,包含了變量時內(nèi)置類型的所有狀態(tài)
jmp, loop
- 無條件轉(zhuǎn)移
- 條件轉(zhuǎn)移
jmp destination
top:
…
jmp: top
loop destination
- 循環(huán)目標與當前地址在-128到127字節(jié)之間
- 實地址模式中,cx是loop使用的計數(shù)器,loopd使用ecx, loopw使用cx
總結(jié)
以上是生活随笔為你收集整理的与数据相关的运算符和伪指令 offset align ptr type lengthof sizeof label 间接寻址 间接操作数 数组 变址操作数 指针 jmp, loop的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 两个整数相加 相乘 有符号与无符号
- 下一篇: 汇编 过程 创建并测试 proc