区块结构式IF叙述.PPT

  1. 1、本文档共68页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
区块结构式IF叙述

* 程式執行時期的關係和邏輯運算子 * MASM產生編碼 mov eax,6 cmp eax,val1 jbe @C0001 mov result,1 @C0001: .data val1 DWORD 5 result DWORD ? .code mov eax,6 .IF eax val1 mov result,1 .ENDIF Generated code: MASM自動地產生一次無號的跳躍(JBE). * MASM-產生編碼 mov eax,6 cmp eax,val1 jle @C0001 mov result,1 @C0001: .data val1 SDWORD 5 result SDWORD ? .code mov eax,6 .IF eax val1 mov result,1 .ENDIF 產生編碼: MASM自動地產生一次無號的跳躍(JLE). * .REPEAT 指令 ; Display integers 1 – 10: mov eax,0 .REPEAT inc eax call WriteDec call Crlf .UNTIL eax == 10 在嘗試與迴圈情況有關的之前執行環體,UNTIL 執行. 例題: * .WHILE 指令 ; Display integers 1 – 10: mov eax,0 .WHILE eax 10 inc eax call WriteDec call Crlf .ENDW 在執行環體之前測試迴圈情況.ENDW 指令標示迴圈的結束. 例題: * The End * 字串加密程式 作業: 輸入來自使用者的一個訊息 (字串) 加密訊息 顯示加密訊息 解密訊息 顯示解密的訊息 顯示Encrypt.asm程式的原始碼。樣本輸出: Enter the plain text: Attack at dawn. Cipher text: ?¢¢???-?¢-???ü-Gs Decrypted: Attack at dawn. * BT (位元測試) 指令 選擇其第一個運算元的第n 位元,並且將它複製到進位旗標中 語法: BT bitBase, n bitBase可能是 r/m 16 或 r/m 32 n 可能是r16, r32,或 imm8 例題:跳到編碼L1如果位元9在AX暫存器中被設定: bt AX,9 ; CF = bit 9 jc L1 ; jump if Carry * 有條件的迴圈指令 LOOPZ 和 LOOPE LOOPNZ 和 LOOPNE * LOOPZ 和 LOOPE 語法: LOOPE 目的 LOOPZ 目的 邏輯: ECX ? ECX – 1 if ECX 0 and ZF=1,跳到目的地 否則將不進行跳越的動作,而且控制權會轉移到下一個指令。 * LOOPNZ 和 LOOPNE LOOPNZ (LOOPNE)是一個有條件的迴圈指令 語法: LOOPNZ destination LOOPNE destination 語法: ECX ? ECX – 1; if ECX 0 and ZF=0, jump to destination 否則將不進行跳越的動作,而且控制權會轉移到下一個指令。 * LOOPNZ 例題 .data array SWORD -3,-6,-1,-10,10,30,40,4 sentinel SWORD 0 .code mov esi,OFFSET array mov ecx,LENGTHOF array next: test WORD PTR [esi],8000h ; test sign bit pushfd ; push flags on stack add esi,TYPE array popfd ; pop flags from stack loopnz next ; continue loop jnz quit ; none found sub esi,TYPE array ; ESI points to value quit: 下列編碼發現陣列的第一個為整數數值: * 習題. . . .data array SWORD 50 DUP(?) sentinel SWORD 0FFFFh .code mov esi,OFFSET array mov ecx,LENGTHOF array L1: cmp WORD PTR [esi],0 ; check for zero (fill in your code here) quit: 設置陣列第一個非零價值。ESI 會指向緊接在陣列之後的Sentinel 值: * . . . (解) .data a

您可能关注的文档

文档评论(0)

youbika + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档