匯編語言-004(LABEL 、間接尋址、變址操作數、指針使用、TypeDef、LOOP、DWORD變量交換高位低位字)

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

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

3: 間接尋址訪問數組案例

.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:變址操作數,訪問數組更靈活

.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     ;字節指針
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 : 循環偽指令使用

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

8: LOOP_ARRAY : 數組元素求和例子

.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地址 作變址操作數mov ecx,LENGTHOF intarray  ;循環計數器初始化為元素個數mov eax,0                  ;EAX 記錄總數
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               ;變址計數器mov ecx,SIZEOF source   ;循環計數器
L1:mov al,source[esi]      ;從源字符串取一個字符mov target[esi],al      ;保存到目標字符串inc esi                 ;指向下一個字節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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379429.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379429.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379429.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

(只需挨個復制粘貼命令即可部署)在Centos7下搭建文件服務器(VSFTPD)

觀看北京尚學堂-百戰程序員筆記一、VSFTPD簡介 Linux的組件(一款軟件),安裝到Linux后可以通過java代碼(FtpClient)實現文件的上傳。基于FTP協議。 由于VSFTPD是基于FTP協議,客戶端瀏覽器是需要通過http協議…

POJ 2421 Constructing Roads MST kruskal

最近剛學的并查集所以用kruskal來試試最小生成樹~ kruskal其實用幾句話就能說完~ 1.貪心所有邊的權值,從小到大取值 2.取值時~將邊權非0的兩個頂點~進行并查操作~如果兩個點的祖先不同...邊權加入最小生成樹...并且將兩個點納入同一個集合中 3.判斷是否所有點都在同一個集合中…

c# 聲明類的時候初始化類_使用C#初始化的列表聲明

c# 聲明類的時候初始化類The task is to create/declare a list with an initializer list in C#. 任務是在C#中使用初始化列表創建/聲明一個列表 。 C#清單 (C# List) A list is used to represent the list of the objects, it is represented as Lis…

編寫程序計算所輸日期是當年的第幾天

/* 1.輸入年月日,編寫程序計算所輸日期是當年的第幾天 *//* 2.已知列車隔日發車,且1/1/2006不發車(無ticket),如果所輸入數據在此日期之后,則輸出有沒有車票,否則僅輸出上一步結果。*/ /* month/date/year is which day of the ye…

匯編語言-005(XCHG、標志位操作、算術操作、比例因子的變址尋址、多個常用運算符運用、大端轉小端、數組操作)

1: 用不超過3條XCHG指令對4個8位寄存器的值重新排序,A,B,C,D調整為D,C,B,A .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data.code main PROCmov al,Amov bl,Bmov cl,Cmov dl,Dxchg al,dlxchg bl,clINVOKE ExitProcess,0 main ENDP E…

bcd碼二進制轉十進制_二進制編碼的十進制(BCD碼)及其加法

bcd碼二進制轉十進制Prerequisite: Number systems 先決條件: 數字系統 BCD Code (8421 Code): In BCD 8421 code, each decimal digit is represented using a 4-bit binary number. The 4-bit binary numbers have their weights attached as 8, 4, 2, 1 from MS…

SVN服務器部署

一、SVN版本控制器 Subversion就是一款實現版本控制的工具軟件,通常也成為版本控制器,簡稱SVN。 Subversion是Apache軟件基金會組織下的一個項目 SVN基本操作: checkout(檢出):將一個服務端創建好的項目…

rtmp流\http流測試地址

測試方式:ffplay rtmp://58.200.131.2:1935/livetv/cctv1 rtmp: CCTV-1綜合:rtmp://58.200.131.2:1935/livetv/cctv1 CCTV-2財經:rtmp://58.200.131.2:1935/livetv/cctv2 CCTV-3綜藝:rtmp://58.200.131.2:1935/livetv/cctv3 CCTV-4中文國際:rtmp://58.2…

LINQ to XML:如何讀寫XCData

using System;using System.Xml.Linq;namespace ConsoleApplication1 {class Program{static void Main(string[] args){//寫入CDATA元素塊var doc new XElement("Test",new XElement("User",new XAttribute("name", "chenxizhang"),…

C#中的結構和類之間的區別

C#類和結構 (C# class and structure) In C# and other programming languages, structure and classes are used to define a custom data type, that we can organize according to our need with different types of variables, methods etc. 在C#和其…

[轉載]SQL?Plus?一些使用技巧

原文地址:SQL Plus 一些使用技巧作者:☆水『若寒Sql*plus的使用 Sql*plus介紹 Sql*plus是oracle提供的一個工具程序,既可以在oracle服務器使用,也可以在oracle客戶端使用。在windows下分兩種,sqlplus.exe是命令行程序&…

云服務器(Centos)部署SVN

1,安裝svn yum install subversion 2,查看版本號 svnserve --version 3,創建SVN版本庫(在var/svn 文件夾下) 新建文件夾 mkdir -p /var/svn/svnrepos 創建版本庫 svnadmin create /var/svn/svnrepos 4,修改…

ffmpeg命令提取像素格式

1: 提取yuv格式:不修改寬高 取3秒 ffmpeg -i test_1920x1080.mp4 -t 3 yuv420p_orig.yuv ffmpeg -i test_1920x1080.mp4 -t 3 -pix_fmt yuv420p yuv420p_orig.yuv 可以使用ffplay播放:ffplay -video_size 1920x1080 yuv420p_orig.yuv 提取y…

Javascript(js)使用function定義構造函數

Javascript并不像Java、C#等語言那樣支持真正的類。但是在js中可以定義偽類。做到這一點的工具就是構造函數和原型對象。首先介紹js中的構造函數。 Javascript中創建對象的語法是在new運算符的后面跟著一個函數的調用。如 1 varobj newObject();2 vardate newDate();運算符new首…

錯誤:將字符串分配給C中的char變量| 常見的C程序錯誤

If you assign a string to the character variable, it may cause a warning or error (in some of the compilers) or segmentation fault error occurs. 如果將字符串分配給字符變量,則可能會導致警告或錯誤(在某些編譯器中)或發生分段錯誤。 Consider the code…

【轉】用BibTeX 寫 Reference

BibTeX 是一種格式和一個程序, 用于協調LaTeX的參考文獻處理,BibTeX 使用數據庫的的方式來管理參考文獻.,BibTeX 文件的后綴名為 .bib。 例子: article{name1, author {作者, 多個作者用 and 連接}, title {標題}, journal {期…

計算機二級C語言易混淆的區別

1,if(a1)與if(a1)的區別 首先,if(a1) 等價于 a1;if(a); 而a 1,是判斷a是不是為1; if(sq)里面的分為兩種情況,一種是sq為0,不執行if里面的代碼內容;另一種是sq不為0,執行里面的代碼內…

ffmpeg命令mp3中提取pcm格式

原mp3文件: ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -f s16le 48000_2_s16le.pcm (這可能是pcm原格式查不到什么信息但是可以播放的:ffplay -ar 48000 -ac 2 -f s16le 48000_2_s16le.pcm) ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -samp…

C++ STL map的使用

1、map簡介 map是一類關聯式容器。它的特點是增加和刪除節點對迭代器的影響很小,除了那個操作節點,對其他的節點都沒有什么影響。對于迭代器來說,可以修改實值,而不能修改key。 2、map的功能 自動建立Key - value的…

bfs廣度優先搜索算法_圖的廣度優先搜索(BFS)

bfs廣度優先搜索算法What you will learn? 您將學到什么? How to implement Breath first search of a graph? 如何實現圖的呼吸優先搜索? Breadth First Search is a level-wise vertex traversal process. Like a tree all the graphs have verte…