汇编语言-013(DAS 、DAA与DAS、QWORD类型用SBB借位减法、编写指令将AX符号扩展到EAX,不能使用CWD、用SHR和条件判断指令将AL循环右移一位、SHLD、压缩十进制转换)
生活随笔
收集整理的這篇文章主要介紹了
汇编语言-013(DAS 、DAA与DAS、QWORD类型用SBB借位减法、编写指令将AX符号扩展到EAX,不能使用CWD、用SHR和条件判断指令将AL循环右移一位、SHLD、压缩十进制转换)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1:DAS : SUB或SBB在AL中生成二進制結果,DAS(減法后的十進制調整)轉壓縮十進制格式
.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main PROC;計算85-48mov bl,48hmov al,85hsub al,bl ;AL=3Dhdas ;AL = 37h(調整后的結果)INVOKE ExitProcess,0 main ENDP END main2:DAA_DAS : DAA與DAS將進位標志位設1的情況
.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main PROCmov al,56hadd al,92h ;AL=E8hdaa ;AL =48 ,CF = 1 當壓縮十進制加法的和數大于99時,進位為1mov al,56hsub al,92h ;AL = C4hdas ;AL = 64h ,CF=1 ;當從小的壓縮十進制數減去大的壓縮十進制整數,進位為1,也就是表示是負數INVOKE ExitProcess,0 main ENDP END main3:QWORD類型用SBB借位減法進行計算
.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data val1 QWORD 20403004362047A1h val2 QWORD 055210304A2630B2h result QWORD 0.code main PROCmov ecx,8mov esi,0mov edi,0clc top:mov al,BYTE PTR val1[esi]sbb al,BYTE PTR val2[esi]mov BYTE PTR result[edi],alinc esiinc ediloop topINVOKE ExitProcess,0 main ENDP END main4:編寫指令將AX符號擴展到EAX,不能使用CWD
.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main PROCmov ax,0123hmov bx,axsar ax,15shl eax,16mov ax,bxINVOKE ExitProcess,0 main ENDP END main5:不用循環移位指令,用SHR和條件判斷指令將AL循環右移一位
.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main PROCmov al,11hshr al,1jnc quitor al,80h quit:INVOKE ExitProcess,0 main ENDP END main6:編寫一條SHLD指令,把AX寄存器的最高位移入DX的最低位,DX左移一位
.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main PROCmov ax,8111hmov dx,1110hshld dx,ax,1INVOKE ExitProcess,0 main ENDP END main7:編寫指令,把字節數組右移一位
.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data byteArray BYTE 81h,20h,33h.code main PROCmov ecx,(LENGTHOF byteArray) - 1mov esi,OFFSET byteArray L1:mov ax,WORD PTR[esi]shr ax,1mov BYTE PTR[esi],alinc esiloop L1shr BYTE PTR[esi],1INVOKE ExitProcess,0 main ENDP END main8: 編寫指令,把字數組左移一位
.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data wordArray WORD 810Dh,0C064h,93ABh.code main PROCmov ecx,(LENGTHOF wordArray )-1mov esi,(OFFSET wordArray )+(2 * TYPE WORD) L1:mov ax,[esi - TYPE WORD]shld WORD PTR[esi],ax,1sub esi,TYPE WORDloop L1shl WORD PTR[esi],1INVOKE ExitProcess,0 main ENDP END main9:編寫過程,把8位無符號二進制數值顯示為十進制式,用AL接收二進制數值,其取值范圍為十進制0到99
include Irvine32.inc.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main PROCmov al,65call showDecimal8INVOKE ExitProcess,0 main ENDPshowDecimal8 PROCaam or ax,3030hmov bx,axshr ax,8call WriteCharmov ax,bxcall WriteCharret showDecimal8 ENDP END main10:壓縮十進制轉換,將4字節的壓縮十進制整數轉為ASCII十進制數字串,向過程傳遞壓縮數字和存放ASCII數字的緩沖地址
.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data val1 DWORD 12345678h result BYTE 8 DUP(0).code main PROCmov eax,val1mov edi,OFFSET resultcall PackedToAscINVOKE ExitProcess,0 main ENDPPackedToAsc PROCmov ecx,8 L1:rol eax,4mov bl,aland bl,0Fhor bl,30hmov BYTE PTR[edi],blinc ediloop L1ret PackedToAsc ENDP END main總結
以上是生活随笔為你收集整理的汇编语言-013(DAS 、DAA与DAS、QWORD类型用SBB借位减法、编写指令将AX符号扩展到EAX,不能使用CWD、用SHR和条件判断指令将AL循环右移一位、SHLD、压缩十进制转换)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 许昌治疗精子活率低最好的医院推荐
- 下一篇: b站硬币多少钱啊?