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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

汇编语言-004(LABEL 、间接寻址、变址操作数、指针使用、TypeDef、LOOP、DWORD变量交换高位低位字)

發(fā)布時間:2023/12/1 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编语言-004(LABEL 、间接寻址、变址操作数、指针使用、TypeDef、LOOP、DWORD变量交换高位低位字) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1: LABEL : 為一個標號定義大小屬性,但不分配內存與下一個變量共用內存,與C中UNION類似

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCoed:DWORD.data val16 LABEL WORD val32 DWORD 12345678hLongValue LABEL DWORD val1 WORD 5678h val2 WORD 1234h.code main PROCmov ax,val16 ;5678hmov dx,[val16+2];1234hmov eax,LongValue ;12345678hINVOKE ExitProcess,0 main ENDP END main

2: 間接尋址,因為常數(shù)偏移量尋址多個數(shù)組元素時,直接尋址不實用,反之,用寄存器作為指針(稱為間接尋址) 并控制寄存器的值,如果一個操作數(shù)使用的間接尋址,就稱為間接操作數(shù)

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data byteVal BYTE 10h.code main PROCmov esi,OFFSET byteValmov al,[esi];PTR與間接操作數(shù)一起使用;inc [esi] 一個操作數(shù)的大小無法從指令看出,報錯inc BYTE PTR [esi] INVOKE ExitProcess,0 main ENDP END main

3: 間接尋址訪問數(shù)組案例

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data arrayB BYTE 10h,20h,30h arrayW WORD 1000h,2000h,3000h arrayD DWORD 10000h,20000h,30000h.code main PROCmov esi,OFFSET arrayBmov al,[esi]inc esimov al,[esi]inc esimov al,[esi]mov esi,OFFSET arrayWmov ax,[esi]add esi,2mov ax,[esi]add esi,2mov ax,[esi]mov esi,OFFSET arrayDmov eax,[esi]add esi,4mov eax,[esi]add esi,4mov eax,[esi]INVOKE ExitProcess,0 main ENDP END main

4:變址操作數(shù),訪問數(shù)組更靈活

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data arrayB BYTE 10h,20h,30h arrayW WORD 1000h,2000h,3000h arrayD DWORD 10000h,20000h,30000h.code main PROCmov esi,0mov al,arrayB[esi] ;第一種格式constant [reg]mov esi,OFFSET arrayW ;第二種格式 [constant + reg]mov ax,[esi]mov ax,[esi+2]mov ax,[esi+4];比例因子mov esi,3 * TYPE arrayDmov eax,arrayD[esi];更簡單的做法mov esi,3 ;下標mov eax,arrayD[esi * 4];使用TYPE 更靈活mov eax,arrayD[esi * TYPE arrayD]INVOKE ExitProcess,0 main ENDP END main

5: 指針使用

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data arrayB BYTE 10h,20h,30h,40h arrayW WORD 1000h,2000h,3000h,4000h ptrB DWORD arrayB ptrW DWORD arrayW ;使用OFFSET運算符使這種關系更加準確 optrB DWORD OFFSET arrayB optrW DWORD OFFSET arrayW.code main PROCINVOKE ExitProcess,0 main ENDP END main

6: TypeDef : 定義新類型,與C的typedef 類似,不在.data段內定義的

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORDPBYTE TYPEDEF PTR BYTE ;字節(jié)指針 PWORD TYPEDEF PTR WORD ;字指針 PDWORD TYPEDEF PTR DWORD ;雙字指針.data arrayB BYTE 10h,20h,30h,40h arrayW WORD 1,2,3 arrayD DWORD 4,5,6ptr0 PBYTE ? ;未初始化 ptr1 PBYTE arrayB ptr2 PWORD arrayW ptr3 PDWORD arrayD.code main PROCmov esi,ptr1mov al,[esi]mov esi,ptr2mov ax,[esi]mov esi,ptr3mov eax,[esi]INVOKE ExitProcess,0 main ENDP END main

7: LOOP : 循環(huán)偽指令使用

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data count DWORD ? bytes BYTE 1,2,3,4 .code main PROCmov ecx,100 ;設置外層循環(huán)計數(shù) L1:mov count,ecx ;保存外層計數(shù)mov ecx,20 ;設置內層計數(shù) L2:mov eax,ecxloop L2 ;重復內層mov ecx,count ;恢復外層計數(shù)loop L1 ;重復外層INVOKE ExitProcess,0 main ENDP END main

8: LOOP_ARRAY : 數(shù)組元素求和例子

.386 .model flat,stdcall .stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data intarray DWORD 10000h,20000h,30000h,40000h.code main PROCmov edi,OFFSET intarray ;EDI=intarray地址 作變址操作數(shù)mov ecx,LENGTHOF intarray ;循環(huán)計數(shù)器初始化為元素個數(shù)mov eax,0 ;EAX 記錄總數(shù) L1:add eax,[edi] ;加一個元素add edi,TYPE intarray ;指向下一個元素loop L1 ;重復INVOKE ExitProcess,0 main ENDP END main

9: LOOP_STRAING : 復制字符串例子

.386 .model flat,stdcall .stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data source BYTE "This is the source string",0 target BYTE SIZEOF source DUP(0).code main PROCmov esi,0 ;變址計數(shù)器mov ecx,SIZEOF source ;循環(huán)計數(shù)器 L1:mov al,source[esi] ;從源字符串取一個字符mov target[esi],al ;保存到目標字符串inc esi ;指向下一個字節(jié)loop L1 ;重復INVOKE ExitProcess,0 main ENDP END main

10: DWORD變量交換高位低位字

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data tword LABEL WORD three DWORD 12345678h ;56781234.code main PROCmov si,tword ;或者用WORD PTR threemov di,[tword+2] ;WORD PTR [three + 2]mov tword,di ;WORD PTR threemov [tword+2],si ;WORD PTR [three + 2]mov eax,threeINVOKE ExitProcess,0 main ENDP END main

總結

以上是生活随笔為你收集整理的汇编语言-004(LABEL 、间接寻址、变址操作数、指针使用、TypeDef、LOOP、DWORD变量交换高位低位字)的全部內容,希望文章能夠幫你解決所遇到的問題。

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