日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

与数据相关的运算符和伪指令 offset align ptr type lengthof sizeof label 间接寻址 间接操作数 数组 变址操作数 指针 jmp, loop

發布時間:2025/6/17 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 与数据相关的运算符和伪指令 offset align ptr type lengthof sizeof label 间接寻址 间接操作数 数组 变址操作数 指针 jmp, loop 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

與數據相關的運算符和偽指令

offset

  • 數據標號的偏移量,按字節計算,表示數據標號到數據段開始的距離
.data bVal byte ? wVal word ? dVal dword ? dVal2 dword ?.code mov esi, offset bVal ; esi = 00404000h mov esi, offset wVal ; esi = 00404001h mov esi, offset dVal ; esi = 00404003h mov esi, offset dVal2 ; esi = 00404007h.data myArray word 1, 2, 3, 4, 5 .code mov esi, offset myArray + 4.data bigArray dword 500 dup(?) pArray dword bigArray .code mov esi, pArray

align

  • 將一個變量對齊到字節邊界、字邊界、雙字邊界或段落邊界
  • align bound[1, 2, 4, 8, 16]
  • 1:下一個變量對齊于1字節邊界(默認);2:下一個變量對齊于偶數地址;4:下一個變量地址為4的倍數;…
bVal byte ? ; 00404000h Align 2 wVal word ? ; 00404002h bVal2 byte ? ; 00404004h align 4 dVal dword ? ; 00404008h dVal2 dword ? ; 004000ch

ptr

  • 重寫一個已經被聲明過的操作數的大小類型
.data myDouble dword 12345678h .code mov ax, word ptr myDouble ; ax = 5678h mov ax, word ptr [myDouble + 2] ; ax = 1234h mov al, byte prt myDouble ; al = 78h ; 將較小的值送入較大的目的操作數 .data wordList word 5678h, 1234h .code mov eax, dword ptr wordList ; eax = 12345678h

type

變量單個元素的大小,按字節計算

.data var1 byte ? ; type var1: 1 var2 word ? ; type var2: 2 var3 dword ? ; type var3: 4 var4 qword ? ; type var4: 8

lengthof

  • 計算數組中元素的個數,元素是由數組標號同一行出現的數值定義的
.data byte1 byte 10, 20, 30 ; lengthof byte1: 3 array1 word 30 dup(?), 0, 0 ; lengthof array1: 30 + 2 array2 word 5 dup(3 dup(?)) ; lengthof array2: 5 * 3 array3 dword 1, 2, 3, 4 ; lengthof array3: 4 digitStr byte "12345678", 0 ;lengthof digitStr: 9 ;;; myArray byte 10, 20, 30, 40, 50byte 60, 70, 80, 90, 100 ; lengthof myArray: 5myArray byte 10, 20, 30, 40, 50,byte 60, 70, 80, 90, 100 ; lengthof myArray: 10

sizeof:lengthof與type的乘積

.data intArray word 32 dup(0) .code mov eax, sizeof intArray ; eax = 64

label

  • 插入一個標號,并定義它的大小屬性,但不為其分配存儲空間
.data val16 label word val32 dword 12345678h .code mov ax, val16 ; ax = 5678h mov ax, [val16 + 2] ; ax = 1234h ; val16與val32共享一個內存位置.data LongValue lable dword val1 word 5678h val2 word 1234h .code mov eax, LongValue ; eax = 12345678h

間接尋址

間接操作數

.data byteVal byte 10h .code mov esi, offset byteVal mov al, [esi] ; al = 10h ; mov [esi], bl ;; ptr 與間接操作數一起使用 ; inc [esi] ; 操作數必須有大小 inc byte ptr [esi]

數組

.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

變址操作數

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,除了尋址堆棧數據; 變址操作數中的比例因子 .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 運算符

    • 創建用戶定義類型,包含了變量時內置類型的所有狀態
    pbyte typedef ptr byte.data arrayB byte 10h, 20h, 30h, 40h ptr1 pbyte ? ; 未初始化 ptr2 pbyte arrayB ; 指向一個數組

jmp, loop

  • 無條件轉移
  • 條件轉移

jmp destination

top:

jmp: top

loop destination

  • 循環目標與當前地址在-128到127字節之間
  • 實地址模式中,cx是loop使用的計數器,loopd使用ecx, loopw使用cx
mov ax, 0 mov ecx, 5 L1:inc axloop L1; 循環中修改ecx .data count dword ? .code mov ecx, 100 top: mov count, ecxmov ecx, 20mov ecx, countloop top; 循環嵌套 .data count dword ? .code mov ecx, 100 L1: mov count, ecxmov ecx, 20 L2:loop L2mov ecx, countloop L1

總結

以上是生活随笔為你收集整理的与数据相关的运算符和伪指令 offset align ptr type lengthof sizeof label 间接寻址 间接操作数 数组 变址操作数 指针 jmp, loop的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。