第六章:條件處理.

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

多核结构与程序设计 杨全胜 东南大学成贤学院计算机系.
输入输出程序设计 输入输出的基本概念 无条件方式输入输出 查询方式输入输出 中断方式输入输出.
汇编语言程序设计 吴 向 军 中山大学计算机科学系
微型计算机技术 教 学 指 导(七) 太原广播电视大学 郭建勇.
Advantage And Disadvantage
第10章 DOS功能调用与BIOS中断调用.
第7章 8086/8088汇编语言程序设计 7.1 引言 7.2 顺序程序设计 7.3 分支结构程序设计 7.4 循环结构程序设计
第四章 汇编语言 程序设计 任课教师:王晓甜
大连理工大学软件学院 软件工程系 赖晓晨 计算机组成与结构 大连理工大学软件学院 软件工程系 赖晓晨
Chapter 5 迴圈.
本周实验安排 实验内容:(P231)人名排序的例子。
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年10月30日.
Chapter 1 複習.
第3章 80x86汇编语言程序设计(下).
單元4:資料轉移、定址和算術.
4.1 汇编语言 4.2 顺序结构程序 4.3 分支程序设计 4.4 循环程序设计 4.5 子程序设计
第3章 80x86汇编语言程序设计(上) 16位汇编版本 时间不够的情况下只讲16位汇编.
3.3.5 程序控制指令 控制转移指令分为: 转移指令 循环控制指令 调用和返回指令 中断指令.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月26日.
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
汇编语言程序设计 Assembly Language Programming
第三章 寻址方式与指令系统 3.1 寻址方式 一条指令通常由两大部分构成: 操作码 操作数
第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第四节 Intel 8253在IBM PC机上的应用.
指令集架構 計算機也跟人類一樣,需要提供一套完整的語言讓人們跟它充分溝通,以完成正確的計算工作。
2-3 基本數位邏輯處理※.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月05日.
C 程式設計— 控制敘述 台大資訊工程學系 資訊系統訓練班.
第八章 输入输出程序设计 总线 CPU MEM I/O接口 I/O设备.
第3章 IA-32指令系统 3.1 基本数据类型 3.2 IA-32的指令格式 3.3 IA-32指令的操作数寻址方式
計算機結構 – 概論 陳鍾誠 於金門大學.
第8章 寻址方式与指令系统.
基本的”防”黑客技术 Basic” ” Hacker Technique
第一章 8086程序设计 第二章 MCS-51程序设计 第三章 微机基本系统的设计 第四章 存贮器与接口 第五章 并行接口
汇编语言程序设计课程设计 第二次实验 DEBUG基本命令与算术运算指令
第3章 微型计算机输入输出接口 3.1 输入/输出接口 3.2 输入输出数据传输的控制方式 3.3 开关量输入输出接口 欢迎辞.
第六章 子程序结构 §6.1 子程序的设计方法 §6.2 嵌套与递归子程序 §6.3 子程序举例 §6.4 DOS系统功能调用.
邏輯關係運算 == 等於 & 且 (logical and) ~= 不等於 | 或 (logical or) < 小於
條件處理.
第5章 循环与分支程序设计 学习目标: 了解并掌握循环程序的构造方法,尤其是对循环控制条件的设置以及可能出现的边界情况的考虑。掌握起泡排序算法这种多重循环程序设计中的常用方法。交换标志位的设置在此算法中更能提高效率。学会在数组排序算法中采用折半查找法来提高查找效率。学会使用跳跃表法实现CASE结构。
第一單元 建立java 程式.
分支宣告與程式設計 黃聰明 國立臺灣師範大學數學系
4.1 汇编语言程序格式 4.2 MASM中的表达式 4.3 伪指令语句 4.4 DOS系统功能调用和BIOS中断调用
3.4.5 控制转移指令(Control transfer instructions) (一)、控制转移指令概述
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月19日.
義守大學電機工程學系 陳慶瀚 第4章 VHDL Sequential語法 義守大學電機工程學系 陳慶瀚
江西财经大学信息管理学院 《数据库应用》课程组2007
第4章 汇编语言程序格式  汇编程序功能  伪操作  汇编语言程序格式  汇编语言程序的上机过程.
4-15 WDT HT66F50.
习题3 1、 分别说明下列指令的原操作数和目的操作数各采用什么寻址方式。 设定如下: ①立即寻址 ② ① ②寄存器寻址
软件工程 第四章 软件设计 软件过程设计技术与工具.
JAVA 程式設計 資訊管理系 - 網路組.
輸入&輸出 函數 P20~P21.
第九章 BIOS和DOS中断 在存储器系统中,从地址0FE000H开始的8K ROM(只读存储器)中装有BIOS(Basic Iuput /output System)例行程序。驻留在ROM中的BIOS给PC系列的不同微处理器提供了兼容的系统加电自检,引导装入,主要I/O设备的处理程序以及接口控制等功能模块来处理所有的系统中断。使用BIOS功能调用,给程序员编程带来很大方便,程序员不必了解硬件操作的具体细节,直接用指令设置参数,然后中断调用BIOS中的子功能,所以利用BIOS功能编写的程序简洁,可读性好,
第2章 80x86计算机组织  计算机系统  存储器  中央处理机  外部设备.
CH05. 選擇敘述.
期末考.
挑戰C++程式語言 ──第8章 進一步談字元與字串
《微型计算机原理与接口技术》 第4版 王良 宁德师范学院 吴宁 乔亚男 编著 清华大学出版社 出版
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年12月17日.
虚拟机加密,是把源程序的X86指令变成自定义的伪指令,执行时内置在保护程序中的VM就会启动,读取伪指令,然后解析执行
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
第6章 子程序结构 在程序设计中,我们会发现一些多次无规律重复的程序段或语句序列。解决此类问题一个行之有效的方法就是将它们设计成可供反复调用的独立的子程序结构,以便在需要时调用。在汇编语言中,子程序又称过程。 调用子程序的程序称为主调程序或主程序。 2019/7/20 ch6.
微机原理与接口技术 第5章 汇编语言程序设计 西安邮电大学计算机学院 王 钰.
大数据搜索挖掘实验室 第五章 子程序设计 张华平 副教授 博士 Website: 大数据搜索挖掘实验室
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
第三章 8086的指令系统 8086指令特点 8086的寻址方式 8086的指令格式及数据类型 8086的指令集.
快取映射 之直接對映 計算整理.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
Presentation transcript:

第六章:條件處理

章節概要 布林和比較指令 條件跳越 條件迴圈指令 條件結構 應用: 有限狀態機器 使用. IF 指引

布林和比較指令 CPU 狀態旗標 AND 指令 OR 指令 XOR 指令 NOT 指令 應用 TEST 指令 CMP 指令

回顧狀態旗標 當運算的結果為0 時,零值旗標會呈現設定狀態. 如果指令運算所產生的結果,在被當成是有號數時,對目的運算元而言太大 ( 或太小) 了,則進位旗標會呈現設定狀態. 符號旗標呈現設定狀態,則目的運算元為負值,如果符號旗標呈現清除狀態,則目的運算元為正值 當指令運算產生了無效有號數時,則溢位旗標會呈現設定狀態 比較不重要: 當一個指令目的地運算元為低位元組中產生 1 位元的偶數時候,為同等標旗設定狀態. 附加的標旗設定狀態當運算產生進行3位元到4位元

AND 指令 AND 指令會執行兩個運算元中,每一對相對應位元之間的逐位元AND 布林運算,並且將結果存放於目的運算元 語法: AND destination,source (相同的運算元類型當做 MOV) AND

OR 指令 OR 指令會執行兩個運算元中,每一對相對應位元之間的逐位元OR 布林運算,並且將結果存放於目的運算元 語法: OR OR destination,source OR

XOR 指令 XOR 指令會執行兩個運算元中,每一對相對應位元之間的逐位元互斥OR 布林運算,並且將結果存放於目的運算元 語法: XOR XOR destination, source XOR XOR 有一個特別的性質是,如果連續應用在相同的運算元上兩次,則運算元本身的值會被倒轉.

NOT 指令 NOT 指令會使運算元中的所有位元倒轉其值 語法: NOT destination NOT

應用 (1 of 5) 作業:將在 AL 的字元轉換成大寫. 解答:使用AND指令清除5位元. mov al,'a' ; AL = 01100001b and al,11011111b ; AL = 01000001b

應用 (2 of 5) 作業:把一個二進位十進制的位元組轉換成它的相等ASCII十進位的數字。 解答:使用OR指令設定4位元和5位元 mov al,6 ; AL = 00000110b or al,00110000b ; AL = 00110110b The ASCII digit '6' = 00110110b

應用 (3 of 5) 作業:按下鍵盤 CapsLock 鍵 解答:使用OR指令在鍵盤標旗位元組中設定6位元在 0040:0017h 在BIOS資料區域中. mov ax,40h ; BIOS segment mov ds,ax mov bx,17h ; keyboard flag byte or BYTE PTR [bx],01000000b ; CapsLock on 這個編碼只在實時處理模式執行,而不在Windows NT, 2000, or XP.下執行

應用 (4 of 5) 作業:如果一個整數是偶數,跳到標籤。 解答: AND 最小的位元是 1.如果結果是零,數字是偶數的 mov ax,wordVal and ax,1 ; low bit set? jz EvenValue ; jump if Zero flag set JZ(跳躍如果零)在第 6.3 節中被涵蓋。 Your turn: Write code that jumps to a label if an integer is negative.

應用 (5 of 5) 作業:如果在 AL 的值不是零,跳到標籤. 解答: OR位元組本身,使用 JNZ(跳躍如果不是零)指令。 or al,al jnz IsNotZero ; jump if not zero ORing任何的數不改變它的值.

TEST指令 TEST 指令會執行兩個運算元中,每對相對應位元之間隱含的AND 運算,並且依結果設定各旗標 沒有運算元被修正,但是零的標旗是受到影響. 例題:如果位元 0 或位元 1 在 AL 被設定,跳到標籤。 test al,00000011b jnz ValueFound 例題:如果沒有位元 0 也沒有位元 1 在 AL 被設定,跳到標籤。 test al,00000011b jz ValueNotFound

CMP 指令 (1 of 3) 對來源運算元的比較目的地運算元 語法: CMP destination, source 目的地的來源的非破壞性減少(目的地運算元不被改變) 語法: CMP destination, source 例題: destination == source mov al,5 cmp al,5 ; Zero flag set 例題: destination < source mov al,4 cmp al,5 ; Carry flag set

CMP 指令 (2 of 3) The comparisons shown so far were unsigned. 語法: destination > source mov al,6 cmp al,5 ; ZF = 0, CF = 0 (零和進位標旗很清楚) The comparisons shown so far were unsigned.

CMP 指令 (3 of 3) The comparisons shown here are performed with signed integers. 例題: destination > source mov al,5 cmp al,-2 ; Sign flag == Overflow flag 例題: destination < source mov al,-1 cmp al,5 ; Sign flag != Overflow flag

條件跳越 跳躍為基礎. . . 特定標旗 相等 無符號比較 符號比較 編碼字串 應用 位元測試(BT)指令

Jcond 指令 當旗標條件為真時,條件跳越指令會分支到目的標籤上。 例題: JB,JC 跳到標籤如果進位標旗被設定 JE, JZ如果零的標旗被設定,跳到標籤 JS對標籤的跳躍如果符號標旗被設定 JNE, JNZ如果零的標旗很清楚,跳到標籤 JECXZ對標籤的跳躍如果 ECX 等於 0

根據特定旗標值所執行的跳越動作

根據等式關係所執行的跳越動作

無號整數的比較結果所執行的跳越動作

有號數的比較結果所執行的跳越動作

應用 (1 of 5) 作業:如果無號的 EAX 是比 EBX 好,跳到標籤 解答: 使用CMP, 遵循 JA cmp eax,ebx ja Larger 作業:如果無號的 EAX 是比 EBX 好,跳到標籤 解答: 使用CMP, 遵循 JA cmp eax,ebx jg Greater 作業:如果有號EAX比EBX好跳到標籤 解答: 使用CMP,遵循JG

應用 (2 of 5) 跳到標籤 L1 如果無號的EAX 是少於或者等於Val1 跳到標籤 L1 如果有號EAX是少於或者等於Val1 cmp eax,Val1 jbe L1 ; below or equal 跳到標籤 L1 如果無號的EAX 是少於或者等於Val1 cmp eax,Val1 jle L1 跳到標籤 L1 如果有號EAX是少於或者等於Val1

Applications (3 of 5) mov Large,bx cmp ax,bx jna Next mov Large,ax Next: Compare unsigned AX to BX, and copy the larger of the two into a variable named Large mov Small,ax cmp bx,ax jnl Next mov Small,bx Next: Compare signed AX to BX, and copy the smaller of the two into a variable named Small Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.

應用 (4 of 5) 跳到標籤 L1 如果被 ESI 指向記憶字等於零 跳到標籤 L2 如果在被 EDI 指向記憶雙字組是偶數的 cmp WORD PTR [esi],0 je L1 跳到標籤 L2 如果在被 EDI 指向記憶雙字組是偶數的 test DWORD PTR [edi],1 jz L2

應用 (5 of 5) 作業:跳到標籤L1如果位元0,1,和3在AL全部被設定. 解答:除了位元0,1和3清除所有的位元.然後把結果與 00001011 二進作比較. and al,00001011b ; clear unwanted bits cmp al,00001011b ; check remaining bits je L1 ; all set? jump to L1

習題. . . 寫編碼跳到標籤L1如果位元是4,5,或6在BL暫存器中被設定。 寫編碼跳到標籤L2如果AL相同於偶數. 寫編碼跳到編籤L3如果EAX是負數. 寫編碼跳到標籤L4如果語法(EBX -ECX)是比零棒的。

加密字符串 下列的迴路使用XOR指令把在字串的每個字元轉變成新的值. KEY = 239 .data buffer BYTE BUFMAX DUP(0) bufSize DWORD ? .code mov ecx,bufSize ; loop counter mov esi,0 ; index 0 in buffer L1: xor buffer[esi],KEY ; translate a byte inc esi ; point to next byte loop L1

字串加密程式 作業: 輸入來自使用者的一個訊息 (字串) 加密訊息 顯示加密訊息 解密訊息 顯示解密的訊息 顯示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:

習題. . . 設置陣列第一個非零價值。ESI 會指向緊接在陣列之後的Sentinel 值: .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:

. . . (解) .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 pushfd ; push flags on stack add esi,TYPE array popfd ; pop flags from stack loope next ; continue loop jz quit ; none found sub esi,TYPE array ; ESI points to value quit:

條件結構 區塊結構式IF 敘述 複合運算式AND 複合運算式OR WHILE迴圈 表格驅動式選擇

區塊結構式IF 敘述 彙編語言電腦程式設計師能容易地翻譯邏輯陳述編寫C++/Java彙編語言: if( op1 == op2 ) X = 1; else X = 2; mov eax,op1 cmp eax,op2 jne L1 mov X,1 jmp L2 L1: mov X,2 L2:

習題. . . 實行下列虛擬碼彙編語言所有的值是無號的: (這一個問題有多樣的正確解決方法.) if( ebx <= ecx ) { eax = 5; edx = 6; } cmp ebx,ecx ja next mov eax,5 mov edx,6 next: (這一個問題有多樣的正確解決方法.)

習題. . . 彙編語言實行下列的虛擬碼。所有的值是32位元有號整數: (這一個問題有多樣的正確解決辦法.) if( var1 <= var2 ) var3 = 10; else { var3 = 6; var4 = 7; } mov eax,var1 cmp eax,var2 jle L1 mov var3,6 mov var4,7 jmp L2 L1: mov var3,10 L2: (這一個問題有多樣的正確解決辦法.)

複合運算式邏AND (1 of 3) 當實行邏輯AND運算,考慮HLLs捷徑估算 現在我們先來考慮下列虛擬碼,在此虛擬碼中,各數值都假定為無號整數 if (al > bl) AND (bl > cl) X = 1;

複合式運算AND (2 of 3) 這是可能的履行. . . if (al > bl) AND (bl > cl) X = 1; cmp al,bl ; first expression... ja L1 jmp next L1: cmp bl,cl ; second expression... ja L2 L2: ; both are true mov X,1 ; set X to 1 next:

複合式運算AND (3 of 3) if (al > bl) AND (bl > cl) X = 1; 此程式碼的大小縮減了29% ( 七個指令降為五個),這是因為如果第一個JBE 指令沒有進行跳越,那麼CPU 便會直接進入第二個CMP 指令 : cmp al,bl ; first expression... jbe next ; quit if false cmp bl,cl ; second expression... mov X,1 ; both are true next:

習題. . . 彙編語言實行下列的虛擬碼。所有的值是無號的: (這一個問題有多樣的正確解決辦法.) if( ebx <= ecx && ecx > edx ) { eax = 5; edx = 6; } cmp ebx,ecx ja next cmp ecx,edx jbe next mov eax,5 mov edx,6 next: (這一個問題有多樣的正確解決辦法.)

複合式運算OR (1 of 2) 實行邏輯OR運算,考慮 HLLs 使用捷徑估算 在下列的例子中,如果第一個表達是真實的,第二個表達被跳越: if (al > bl) OR (bl > cl) X = 1;

複合式運算OR (1 of 2) 我們能使用 “ 秋天直通式 ” 邏輯使編碼儘可能保持短: if (al > bl) OR (bl > cl) X = 1; 我們能使用 “ 秋天直通式 ” 邏輯使編碼儘可能保持短: cmp al,bl ; is AL > BL? ja L1 ; yes cmp bl,cl ; no: is BL > CL? jbe next ; no: skip next statement L1: mov X,1 ; set X to 1 next:

WHILE 迴圈 WHILE 結構在執行一個區塊的敘述以前,會先測試迴圈條件是否成立。 考慮下列例題: 這是可能履行的: while( eax < ebx) eax = eax + 1; top: cmp eax,ebx ; check loop condition jae next ; false? exit loop inc eax ; body of loop jmp top ; repeat the loop next: 這是可能履行的:

習題. . . 實行下列的迴圈,使用無號32位元整數: while( ebx <= val1) { ebx = ebx + 5; val1 = val1 - 1 } top: cmp ebx,val1 ; check loop condition ja next ; false? exit loop add ebx,5 ; body of loop dec val1 jmp top ; repeat the loop next:

表格驅動式選擇(1 of 3) 一種使用表格查詢來取代多路選擇結構的方法 在使用這種方法之前,必須先建立一個表格,此表格必須包含欲查找的值 使用迴圈找表格 在須要進行大量比較工作時,此方法具有最佳的效益

表格驅動式選擇(2 of 3) Step 1:產生一個表格包含查詢值和彌補程序: .data CaseTable BYTE 'A' ; lookup value DWORD Process_A ; address of procedure EntrySize = ($ - CaseTable) BYTE 'B' DWORD Process_B BYTE 'C' DWORD Process_C BYTE 'D' DWORD Process_D NumberOfEntries = ($ - CaseTable) / EntrySize

required for procedure pointers 表格驅動式選擇(3 of 3) Step 2:使用一個迴圈搜尋表格: mov ebx,OFFSET CaseTable ; point EBX to the table mov ecx,NumberOfEntries ; loop counter L1: cmp al,[ebx] ; match found? jne L2 ; no: continue call NEAR PTR [ebx + 1] ; yes: call the procedure jmp L3 ; and exit the loop L2: add ebx,EntrySize ; point to next entry loop L1 ; repeat until ECX = 0 L3: required for procedure pointers

應用:有限狀態機器 Start state Terminal state(s) Nonterminal state(s) 指的是一個依據某些輸入而改變狀態的機器或程式。 使用圖表來描述FSM 是相當容易的,在這樣的圖表中,會包含方形 圖形及方形與方形之間具有箭號的線條,其中,具有箭頭的線條稱為邊 或弧 ,而方形或圓形則稱為節點. 有限狀態機器是一種更具一般性的結構型態的特殊情形,這種更一般性的結構稱為有向圖 三個基本狀態代表節點: Start state Terminal state(s) Nonterminal state(s)

有限狀態機器 供應程式的控制流程的視覺追蹤 容易的修正 容易地以彙編語言實行 一個依據某些輸入而改變狀態的機器或程式 能被使用認可,或語言規則支配的字元的序列有效(被稱為了正規表示式) 優點: 供應程式的控制流程的視覺追蹤 容易的修正 容易地以彙編語言實行

FSM 例題 FSM 狀態B 到狀態C 的過渡,則只有當從輸入資料流中讀取到的是字母z 時: FSM認可好號整數:

習題. . . 以下是一個有號十進位整數的有限狀態機器的簡化圖,試問它能和第6.6.2 節中所示的哪一個圖形,運作得一樣好嗎?如果不能,請問為什麼不能?

實行FSM 下列各項在整數FSM中是來陳述編碼: 顯示 Finite.asm 原始碼. StateA: call Getnext ; read next char into AL cmp al,'+' ; leading + sign? je StateB ; go to State B cmp al,'-' ; leading - sign? call IsDigit ; ZF = 1 if AL = digit jz StateC ; go to State C call DisplayErrorMsg ; invalid input found jmp Quit 顯示 Finite.asm 原始碼.

有號整數FSM 的流程圖 陳述 A 接受一個正負符號 , 或一個十進位的數字。

習題. . . 畫FSM圖表十六進位整數常數遵循MASM語法. 畫一個流程表陳述妳的FSM.

使用 .IF指令 Runtime 語法 Relational and Logical 運算 MASM-Generated 編碼 .REPEAT D指令 .WHILE 指令

Runtime 語法 .IF, .ELSE, .ELSEIF, 和 .ENDIF能用來評估執行時間語法而且產生區段-構成IF陳述。 例題: .IF eax > ebx mov edx,1 .ELSE mov edx,2 .ENDIF .IF eax > ebx && eax > ecx mov edx,1 .ELSE mov edx,2 .ENDIF MASM 為你產生 “ 隱藏的 ” 編碼,有編碼標籤, CMP 和有條件的跳躍指令.

程式執行時期的關係和邏輯運算子

MASM產生編碼 Generated code: MASM自動地產生一次無號的跳躍(JBE). mov eax,6 cmp eax,val1 .data val1 DWORD 5 result DWORD ? .code mov eax,6 .IF eax > val1 mov result,1 .ENDIF Generated code: mov eax,6 cmp eax,val1 jbe @C0001 mov result,1 @C0001: MASM自動地產生一次無號的跳躍(JBE).

MASM-產生編碼 產生編碼: MASM自動地產生一次無號的跳躍(JLE). mov eax,6 cmp eax,val1 .data val1 SDWORD 5 result SDWORD ? .code mov eax,6 .IF eax > val1 mov result,1 .ENDIF 產生編碼: mov eax,6 cmp eax,val1 jle @C0001 mov result,1 @C0001: MASM自動地產生一次無號的跳躍(JLE).

.REPEAT 指令 在嘗試與迴圈情況有關的之前執行環體,UNTIL 執行. 例題: ; Display integers 1 – 10: mov eax,0 .REPEAT inc eax call WriteDec call Crlf .UNTIL eax == 10

.WHILE 指令 在執行環體之前測試迴圈情況.ENDW 指令標示迴圈的結束. 例題: ; Display integers 1 – 10: mov eax,0 .WHILE eax < 10 inc eax call WriteDec call Crlf .ENDW

The End