freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

匯編語言第六章:循環(huán)與分支程序設(shè)計(jì)-文庫吧

2024-09-29 16:38 本頁面


【正文】 位 JNC NEXT ; CF≠1時(shí) , 轉(zhuǎn)向 NEXT再次循環(huán) INC CX ; CF=1, 計(jì)數(shù)器 (CX)←(CX) +1 NEXT: JMP AGAIN ; 再次循環(huán) QUIT : ? 上述程序?yàn)?當(dāng)型循環(huán) 程序結(jié)構(gòu): 先判斷條件,后執(zhí)行循環(huán) 。 課堂練習(xí) : 采用循環(huán)結(jié)構(gòu)完成自然數(shù) 1到 100的求和運(yùn)算。 next 當(dāng)型循環(huán)與直到型循環(huán) : 存儲(chǔ)模型與簡化段定義偽指令 較新版本的匯編程序( )除支持完整段定義偽指令外,還提供了一種新的簡單易用的存儲(chǔ)模型和簡化的段定義偽指令。 1. 存儲(chǔ)模型偽指令 存儲(chǔ)模型的作用是什么呢?存儲(chǔ)模型決定一個(gè)程序的規(guī)模,也確定進(jìn)行子程序調(diào)用、指令轉(zhuǎn)移和數(shù)據(jù)訪問的缺省屬性( NEAR或 FAR)。當(dāng)使用簡化段定義的源程序格式時(shí),在段定義語句之前必須有存儲(chǔ)模型 .MODEL語句,說明在存儲(chǔ)器中應(yīng)如何安放各個(gè)段。 MODEL偽指令的常用格式如下: . MODEL 存儲(chǔ)模型 存儲(chǔ)模型 功 能 適用操作系統(tǒng) Tiny (微型 ) 所有數(shù)據(jù)和代碼都放在一個(gè)段內(nèi),其訪問都為NEAR型,整個(gè)程序 ≤64K,并會(huì)產(chǎn)生 .COM文件。 MSDOS Small (小型 ) 所有代碼在一個(gè) 64KB的段內(nèi),所有數(shù)據(jù)在另一個(gè)64KB的段內(nèi)(包括數(shù)據(jù)段 ,堆棧段和附加段)。 MSDOS Windows Medium (中型 ) 所有代碼> 64K時(shí)可放在多個(gè)代碼段中,轉(zhuǎn)移或調(diào)用可為 FAR型。所有數(shù)據(jù)限在一個(gè)段內(nèi), DS可保持不變。 MSDOS Windows Compact(緊湊型 ) 所有代碼限在一個(gè)段內(nèi),轉(zhuǎn)移或調(diào)用可為 NEAR型。數(shù)據(jù)> 64K時(shí),可放在多個(gè)段中。 MSDOS Windows Large (大型 ) 允許代碼段和數(shù)據(jù)段都可超過 64K,被放置在有多個(gè)段內(nèi),所以數(shù)據(jù)和代碼都是遠(yuǎn)訪問。 MSDOS Windows Huge (巨型 ) 單個(gè)數(shù)據(jù)項(xiàng)可以超過 64K,其它同 Large模型 MSDOS Windows Flat (平展型 ) 所有代碼和數(shù)據(jù)放置在一個(gè)段中,但段地址是 32位的,所以整個(gè)程序可為 4GB。 MASM 型。 OS/2 WindowsNT 在 DOS下用匯編語言編程時(shí),可根據(jù)程序的不同特點(diǎn)選擇前 6種模型,一般可以選用 SMALL模型。另外, TINY模型將產(chǎn)生 COM程序,其他模型產(chǎn)生 EXE程序。 FLAT模型只能運(yùn)行在 32位 x86 CPU上, DOS下不允許使用這種模型。當(dāng)與高級(jí)語言混合編程時(shí),兩者的存儲(chǔ)模型應(yīng)當(dāng)一致 2. 簡化的段偽指令 簡化的段定義語句書寫簡短,語句 .CODE、 .DATA和 .STACK分別表示代碼數(shù)據(jù)段和堆棧段的開始,一個(gè)段的開始自動(dòng)結(jié)束前面一個(gè)段。采用簡化段指令之前必須有存儲(chǔ)模型語句 .MODEL。 簡化段偽指令 功 能 注釋 .CODE [段名 ] 創(chuàng)建一個(gè)代碼段 段名為可選項(xiàng),如不給出段名,則采用默認(rèn)段名。對(duì)于多個(gè)代碼段的模型,則應(yīng)為每個(gè)代碼段指定段名。 .DATA 創(chuàng)建一個(gè)數(shù)據(jù)段 段名是: _DATA .DATA? 創(chuàng)建無初值變量的數(shù)據(jù) 段 段名是: _BSS .FARDATA [段名 ] 建立有初值的遠(yuǎn)調(diào)用數(shù) 據(jù)段 可指定段名,如不指定,則將以 FAR_DATA命名。 .FARDATA? [段名 ] 建立無初值的遠(yuǎn)調(diào)用數(shù)據(jù)段 可指定段名,如不指定,則將以FAR_BSS命名。 .CONST 建立只讀的常量數(shù)據(jù)段 段名是: CONST .STACK [大小 ] 創(chuàng)建一個(gè)堆棧段并指定 堆棧段大小 段名是: stack。如不指定堆棧段大小,則缺省值為 1KB 3.與簡化段定義有關(guān)的預(yù)定義符號(hào) 匯編程序給出了與簡化段定義有關(guān)的一組預(yù)定義符號(hào),它們可在程序中出現(xiàn),并由匯編程序識(shí)別使用。有關(guān)的預(yù)定義符號(hào)如下: ( 1) @code 由 .CODE 偽指令定義的段名或段組名。 ( 2) @data 由 .DATA 偽指令定義的段名,或由 .DATA 、 .DATA?、 .CONST和 .STACK所定義的段組名。 ( 3) @stack 堆棧段的段名或段組名。 在完整的段定義情況下,在程序的一開始,需要用段名裝入數(shù)據(jù)段寄存器,例 mov ax,data_seg1 mov ds,ax 若用簡化段定義,則數(shù)據(jù)段只用 .data來定義,而并未給出段名,此時(shí)可用 mov ax,@data mov ds,ax 這里預(yù)定義符號(hào) @data就給出了數(shù)據(jù)段的段名。 返回 參考答案 2: .model small .code mov ax, @data mov ds, ax xor ax, ax mov cx, 100 again: add ax, cx loop again mov ax, 4c00h int 21h end 參考答案 1: .model small .data num dw 1 .code mov ax, @data mov ds, ax mov ax, 0 mov cx, 100 again: add ax, num inc num loop again mov ax, 4c00h int 21h end ( 下述例子可用 或 版匯編程序匯編 ) 思考題:顯示下面數(shù)組中的數(shù)據(jù): ARRAY DB 1, 3, 7, 8, 5, 4, 6, 8 第一章 基礎(chǔ)知識(shí) 第六章 循環(huán)與分支程序設(shè)計(jì) 循環(huán)程序設(shè)計(jì)方法 例 試編制一個(gè)程序把 BX寄存器內(nèi)的二進(jìn)制數(shù)用十六進(jìn)制數(shù)的形式在屏幕上顯示出來。 code_seg segment main proc far assume cs:code_seg start: mov bx , 8222h mov ch , 4 。四位循環(huán)一次 , 共進(jìn)行4次循環(huán)即可以 rotate: mov cl , 4 。循環(huán)高 4位到低 4位 rol bx , cl。對(duì) BX進(jìn)行循環(huán)操作 mov al , bl。 思路: 四位二進(jìn)制對(duì)應(yīng)一位十六進(jìn)制。 循環(huán) 4次 每次循環(huán) 4位 高位先顯示: rol 判斷結(jié)果和 10比較。 第一章 基礎(chǔ)知識(shí) 第六章 循環(huán)與分支程序設(shè)計(jì) and al , 0fh。取出要轉(zhuǎn)換的 4位二進(jìn)制數(shù) , 存入 al寄存器中 cmp al , 10。判斷是否為十進(jìn)制數(shù)制的字符 jae changetoa_f 。如果大于 10, 跳轉(zhuǎn)到 changetoa_f進(jìn)行十六進(jìn)制的轉(zhuǎn)換 add al , 30h 。09的十六進(jìn)制轉(zhuǎn)換 jmp disp changetoa_f: add al , 37h 。af的十六進(jìn)制轉(zhuǎn)換 disp: mov dl , al 。在屏幕上顯示結(jié)果 mov ah , 02 int 21h dec ch 。利用 dec 和 jnz來實(shí)現(xiàn)循環(huán)操作 , 代替 loop的功能 jnz rotate 第一章 基礎(chǔ)知識(shí) 第六章 循環(huán)與分支程序設(shè)計(jì) mov ax , 4c00h int 21h main endp code_seg ends end start 。程序結(jié)束 例 在 ADDR單元中存放著數(shù) Y的地址,試編制一程序把 Y中 1的個(gè)數(shù)存入COUNT單元中。 算法:要測出 Y中 1的個(gè)數(shù)就應(yīng)逐位測試,一個(gè)比較簡單的辦法是可根據(jù)最高有效位是否為 1來記數(shù),然后用移位的方法把各位數(shù)逐次移到最高位去。循環(huán)的結(jié)束可以用計(jì)數(shù)值為 16來控制,但更好的辦法是結(jié)合上述方法可以用測試數(shù)是否為 0來作為結(jié)束條件,這樣可以在很多情況下縮短程序的執(zhí)行時(shí)間。此外考慮到 Y本身為 0的可能性,應(yīng)該采用 WHILE— DO的結(jié)構(gòu)形式。 第一章 基礎(chǔ)知識(shí) 第六章 循環(huán)與分支程序設(shè)計(jì) 程序框圖 第一章 基礎(chǔ)知識(shí) 第六章 循環(huán)與分支程序設(shè)計(jì) 程序: data_seg segment Y equ 020FH number dw Y addr dw number count dw ? data_seg ends code_seg segment assume cs:code_seg , ds:data_seg main proc far start: mov ax ,data_seg mov ds ,ax mov cx ,0 mov bx ,addr mov ax ,[bx] repeat: test ax,0ffffh jz result jns shift inc cx shift: shl ax ,1 jmp repeat result: mov count , cx mov ax,4c00h 第一章 基礎(chǔ)知識(shí) 第六章 循環(huán)與分支程序設(shè)計(jì) int 21h main endp code_seg ends end start 例 在附加段中有一個(gè)首地址為 LIST和未經(jīng)排序的字?jǐn)?shù)組,在數(shù)組的第一個(gè)字中存放著該數(shù)組的長度,數(shù)組的首地址已存放在 DI寄存器中。 AX寄存器中存放著一個(gè)數(shù)。要求編制一程序:在數(shù)組中查找該數(shù),如果找到此數(shù)則把它從數(shù)組中刪除。 算法: 這一程序應(yīng)該首先查找數(shù)組中是否有 (AX),如果沒有則不對(duì)數(shù)組作任何處理就結(jié)束程序。如果找到這一元素則應(yīng)把數(shù)組中位于其前 (指地址比該元素高 )的元素后移一個(gè)字 (即向低 地址方向移動(dòng) ),并修改數(shù)組長度值。如果找到的元素正好位于數(shù)組末尾,則不必移動(dòng)任何元素,只要修改數(shù)組長度值就可以。這里第一部分的查找元素可以使用串處理指令,第二部分的刪除元素則可使用循環(huán)結(jié)構(gòu), 由于查找結(jié)束時(shí)就可以知道該元素的位置,因此可以作為循環(huán)次數(shù)已知的情況來設(shè)計(jì)。 第一章 基礎(chǔ)知識(shí) 第六章 循環(huán)與分支程序設(shè)計(jì) 流程圖: 第一章 基礎(chǔ)知識(shí) 第六章 循環(huán)與分支程序設(shè)計(jì) 程序: data_seg segment LIST dw 10,0,11,22,33,44,55,66,77,88,99 data_seg ends code_seg segment assume cs:code_seg , es:data_seg main proc far start: mov ax , data_seg。代碼段地址空間分配 mov es , ax cld;設(shè)置
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1