匯編語言-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,'A'mov bl,'B'mov cl,'C'mov dl,'D'xchg al,dlxchg bl,clINVOKE ExitProcess,0
main ENDP
END main

2: 用一條算術運算指令和奇偶標志位判斷信息字節是偶校驗還是奇校驗,設AL中的信息字節為0111 0101

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data.code
main PROC     mov al,75h   ;假設信息字節為 0111 0101add al,1     ;1,如果奇偶標志位為1,那么信息字節就是偶校驗否則是奇校驗INVOKE ExitProcess,0
main ENDP
END main

3: 用字節操作數實現兩個負整數相加,使溢出標志位為1 用加法使零標志位和進位標志位同時置1 用減法使進位標志位為1 使用進位標志位與溢出標志位同時為1

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data.code
main PROCmov al,81hadd al,80h ;溢出標志位為1mov al,80hadd al,80h ;零標志位與進位標志位為1mov al,70hsub al,80h ;進位標志位為1mov al,81hadd al,80h ;進位標志位與溢出標志位都為1INVOKE ExitProcess,0
main ENDP
END main

4: 實現算術 EAX = -val2+7-val3+val1 AX = (val4+BX)-val5

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
val1 DWORD 11
val2 DWORD 22
val3 DWORD 33val4 WORD 44
val5 WORD 55 .code
main PROC;EAX = -val2+7-val3+val1neg val2mov eax,val2add eax,7sub eax,val3add eax,val1;AX = (val4+BX)-val5mov ax,val4add ax,bxsub ax,val5INVOKE ExitProcess,0
main ENDP
END main

5: 在一個雙字數組中迭代,用帶比例因子的變址尋址,計算元素總和

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
listD DWORD 1,2,3,4,5,6.code
main PROCmov eax,0mov ecx,LENGTHOF listDmov esi,ecx
L1:   sub esi,1add eax,listD[esi * TYPE listD]loop L1INVOKE ExitProcess,0
main ENDP
END main

6: 多個常用運算符運用例子

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
lMyBytes LABEL WORD  ;插入LABEL定義類型使用myBytes直接送入16位寄存器
myBytes BYTE 10h,20h,30h,40h
ALIGN 1              ;使用myBytes對齊到偶數地址
lMyWords LABEL DWORD  ;插入LABEL定義類型使用myWords直接送入32位寄存器
myWords WORD 3 DUP(?),2000h
myStrings BYTE "ABCDE".code
main PROCmov eax,TYPE myBytes ;1mov eax,LENGTHOF myBytes ;4mov eax,SIZEOF myBytes ;4mov eax,TYPE myWords ;2mov eax,LENGTHOF myWords;4mov eax,SIZEOF myWords  ;8mov eax,SIZEOF myStrings ;5mov dx,WORD PTR myBytes  ;將myBytes前兩個字節送往DX,值為2010hmov al,BYTE PTR [myWords+1] ;將myWords的第二個字節送入ALmov eax,DWORD PTR myBytes  ;將myBytes全部四個字節送入EAXmov eax,lMyWords   ;使用LABEL定義的類型將myWords直接送入32位寄存器mov ax,lMyBytes   ;使用LABEL定義的類型將myBytes直接送入16位寄存器INVOKE ExitProcess,0main ENDP
END main

7: 大端轉小端

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
bigEndian BYTE 12h,34h,56h,78h
littleEndian DWORD ?.code
main PROCmov eax,DWORD PTR bigEndianmov littleEndian,eaxINVOKE ExitProcess,0
main ENDP
END main

8: 交換數組元素對,元素i與元素i+1交換,元素i+2與元素i+3交換

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
dwordList DWORD 1,2,3,4,5,6.code
main PROCmov ecx,LENGTHOF dwordListmov eax,0
L1:	mov esi,dwordList[eax * TYPE dwordList]inc eaxxchg esi,dwordList [eax * TYPE dwordList]dec eaxmov dwordList [eax * TYPE dwordList],esiadd eax,2dec ecxloop L1INVOKE ExitProcess,0
main ENDP
END main

9: 數組元素間隔之和,假設數組為0、2、5、9、10,則元素間隔為2、3、4、1,總和為10

.386 
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
dwordList DWORD 0,2,5,9,10.code
main PROCmov ecx,LENGTHOF dwordList -1mov eax,0
L1:	 mov ebx,ecxmov esi,dwordList[ebx * TYPE dwordList]dec ebxsub esi,dwordList[ebx * TYPE dwordList]add eax,esiloop L1INVOKE ExitProcess,0
main ENDP
END main

10: 將字數組復制到雙字數組

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
wordList WORD 1,2,3,4,5,6
dwordList DWORD 5 DUP(?).code
main PROCmov ecx,LENGTHOF wordList
L1:   dec ecxmovzx eax,wordList[ecx * TYPE wordList]mov dwordList[ecx * TYPE dwordList],eaxinc ecxloop L1INVOKE ExitProcess,0
main ENDP
END main

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

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

相關文章

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…

考研C++必刷題(一)

【程序1】 題目:有1、2、3、4個數字,能組成多少個互不相同且無重復數字的三位數?都是多少? 解題思路: 利用三層循環,分別控制百位十位個位,若百位十位個位有重復的,則不輸出即可。 代…

關于計算機存儲單位?

關于計算機存儲單位? 計算機只能識別二進制。(1010100110. . . ) 1字節 8bit(8比特)–>1byte 8bit 1bit 就是一個 1 或 0 1KB 1024byte byte是[-128 ~ 127],共可以標識256個不同的數字。 byte類型的最大值是怎么計算出來的…

ffmpeg 命令轉封裝

1: 改變編碼格式 原mp4文件:視頻是h264 音頻是aac 視頻轉成h265,音頻轉成mp3(容器為mkv,有些容器不一定支持放h265的) ffmpeg -i test_60s.mp4 -vcodec libx265 -acodec libmp3lame out_h265_mp3.mkv 播放&#xff1a…

Delphi 2010 DataSnap封裝COM對象

在Delphi 2010中,DataSnap已完全可以不使用COM了.想起在windows上配置COM,就麻煩的很,如果在本機還好說,在遠程要涉及到權限等諸多問題(用SocketConnection要方便一些). 如果早期寫的程序中有許多COM對象,我們可以通過DataSnap的封裝,使用適配器模式簡單地封裝一下,那么在客戶端…

JavaScript中帶有示例的Math.PI屬性

JavaScript | Math.PI屬性 (JavaScript | Math.PI Property) Math.PI is a property in math library of JavaScript that is used to find the value of PI(π) which is a mathematical constant whose value is 3.141. It is generally used to solve problems related to c…