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

正文內(nèi)容

[工學(xué)]匯編語言(1)-閱讀頁

2024-11-03 00:07本頁面
  

【正文】 必須有存儲模式偽指令 ? .model語句必須位于所有段定義語句之前 ?存儲模式?jīng)Q定一個程序的規(guī)模 , 確定進(jìn)行子程序調(diào)用 、 指令轉(zhuǎn)移和數(shù)據(jù)訪問的缺省屬性 ? MASM有 7種不同的存儲模式: ① TINY ② SMALL ③ COMPACT ④ MEDIUM ⑤ LARGE ⑥ HUGE ⑦ FLAT TINY微型模式 ?微型模式是 MASM 用于創(chuàng)建 COM類型程序 ?用微型模式編寫匯編語言程序時 , 所有的段地址寄存器都被設(shè)置為同一值 這意味著代碼段 、 數(shù)據(jù)段 、 堆棧段都在同 一個段 內(nèi) , 不大于 64KB;訪問操作數(shù)或指令都只需要使用 16位偏移地址 SMALL小型模式 ? 一般的程序 ( 例如本書的絕大多數(shù)程序示例和習(xí)題 ) 都 可用這種模式 ? 在小型模式下 , 一個程序至多 只能有一個代碼段和一個數(shù)據(jù)段 , 每段不大于 64KB 這里的數(shù)據(jù)段是指數(shù)據(jù)段 、 堆棧段和附加段的總和 , 它們共用同一個段基址 , 總長度不可超過64KB;因此小模式下程序的最大長度為 128KB 訪問操作數(shù)或指令都只需要使用 16位偏移地址;這意味著諸如指令轉(zhuǎn)移 、 程序調(diào)用以及數(shù)據(jù)訪問等都是 近屬性 ( NEAR) , 即小型模式下的調(diào)用類型和數(shù)據(jù)指針缺省分別為近調(diào)用和近指針 COMPACT緊湊模式 ?適合于數(shù)據(jù)量大但代碼量小的程序 ?緊湊模式下 , 代碼段 被限制在 一個 不大于 64KB的段內(nèi);而 數(shù)據(jù)段則可以有多個 , 超過 64KB 這種模式下的調(diào)用類型缺省仍為近調(diào)用;而數(shù)據(jù)指針缺省為遠(yuǎn) ( FAR) 指針 ,因為必須用段地址來區(qū)別多個數(shù)據(jù)段 MEDIUM中型模式 ?中型模式是與緊湊模式互補的模式 適合于數(shù)據(jù)量小但代碼量大的程序 ?中型模式的 代碼段可以 超過 64KB, 有多個 ;但 數(shù)據(jù)段只能有一個 不大于 64KB的段 這種模式下的數(shù)據(jù)指針缺省為近指針;但調(diào)用類型缺省是遠(yuǎn) ( FAR) 調(diào)用 , 因為要利用段地址區(qū)別多個代碼段 LARGE大型模式 ?較大型程序通常采用的存儲模式 ?大型模式 允許的代碼段和數(shù)據(jù)段都有多個 ,都可以超過 64KB;但全部的靜態(tài)數(shù)據(jù) ( 不能改變的數(shù)據(jù) ) 仍限制在 64K字節(jié)內(nèi) 大型模式下的調(diào)用類型和數(shù)據(jù)指針缺省分別為遠(yuǎn)調(diào)用和遠(yuǎn)指針 HUGE( 巨型模式 ) 與大型模式基本相同 ,只是靜態(tài)數(shù)據(jù)不再被限制在 64K字節(jié)之內(nèi) FLAT平展模式 ? 平展模式用于 創(chuàng)建一個 32位的程序 , 它只能運行在 32位 x86 CPU上 。 DOS下編程可選擇前六種模式 , 一般可以選用 SMALL模式 TINY模式產(chǎn)生 COM程序 , 其他模式產(chǎn)生EXE程序 , FLAT模式只能用于 32位程序 簡化段定義偽指令 .STACK [大小 ] ;堆棧段開始 .DATA ;數(shù)據(jù)段開始 .CODE [段名 ] ;代碼段開始 ? 簡化段定義偽指令指明一個邏輯段的開始 , 同時自動結(jié)束前面的一個段 采用簡化段定義偽指令前 , 需有 .model語句 ? 使用簡化段定義 , 各段名稱和其他用戶所需的信息可以使用 MASM預(yù)定義符號 , 例如: data表示由 .data等定義的數(shù)據(jù)段的段名 堆棧段偽指令 .STACK [大小 ] ?堆棧段偽指令 .STACK創(chuàng)建一個堆棧段 ,段名是: stack ?它的參數(shù)指定堆棧段所占存儲區(qū)的字節(jié)數(shù) , 默認(rèn)是 1KB( = 1024 = 400h字節(jié) ) 數(shù)據(jù)段偽指令 .DATA ?數(shù)據(jù)段偽指令 .data創(chuàng)建一個數(shù)據(jù)段 , 段名是: _DATA。設(shè)置 DS mov bx,ss sub bx,dx shl bx,1 shl bx,1 shl bx,1 shl bx,1 cli 。調(diào)整 SS和 SP add sp,bx sti 。 例如 .exit 0對應(yīng)的代碼是: mov ax,4c00h int 21h ? DOS功能調(diào)用的 4ch子功能 ( 返回 DOS) : 入口參數(shù): AH= 4ch, AL=返回數(shù)碼 匯編結(jié)束偽指令 END [標(biāo)號 ] ?指示匯編程序 MASM到此結(jié)束匯編過程 ?源程序的最后必須有一條 END語句 ?可選的標(biāo)號用于指定程序開始執(zhí)行點 , 連接程序?qū)?jù)此設(shè)置 CS : IP值 ?采用了 .startup偽指令就不需要再用 “ end 標(biāo)號 ” 指明開始執(zhí)行點 , 但還要有 end偽指令 ———— 不要糊涂 ———— 程序終止和匯編結(jié)束是兩碼事 第 3章 程序的編寫 ?利用 MASM , 可以非常容易地創(chuàng)建一個 COM程序 ?遵循的規(guī)則: ? 采用 TINY模式 ? 源程序只設(shè)置代碼段 , 無數(shù)據(jù) 、 堆棧等段 ? 程序必須從偏移地址 100h處開始執(zhí)行 ? 數(shù)據(jù)只能安排在代碼段中 , 注意不能與可執(zhí)行代碼相沖突 , 通常在程序最后 .model tiny 。只有代碼段 .startup 。顯示信息 int 21h mov ah,01h 。響鈴 mov dl,07h int 21h .exit 0 。數(shù)據(jù)安排在此 end 。 .model tiny .code 。= 100h ... 。子程序代碼 ... 。 stack segment stack dw 512 dup(?) stack ends data segment ... 。在代碼段填入指令序列 mov ax,4c00h int 21h ... 。類別 39。語句序列 段名 ends ? 完整段定義由 SEGMENT和 ENDS這一對偽指令實現(xiàn) ,SEGMENT偽指令定義一個邏輯段的開始 , ENDS偽指令表示一個段的結(jié)束 ? 段定義指令后的 4個關(guān)鍵字用于確定段的各種屬性 ,堆棧段要采用 stack組合類型 , 代碼段應(yīng)具有 ‘ code’類別 , 其他為可選屬性參數(shù) ? 如果不指定 , 則采用默認(rèn)參數(shù);但如果指定 , 注意要按照上列次序 段定位 ( align) 屬性 ?指定邏輯段在主存儲器中的邊界 , 可為: BYTE 段開始為下一個可用的字節(jié)地址 ( xxxx xxxxb) WORD 段開始為下一個可用的偶數(shù)地址 ( xxxx xxx0b) DWORD 段開始為下一個可用的 4倍數(shù)地址 ( xxxxxx00b) PARA 段開始為下一個可用的節(jié)地址 ( xxxx 0000b) PAGE 段開始為下一個可用的頁地址 ( 0000 0000b) ?簡化段定義偽指令的代碼和數(shù)據(jù)段默認(rèn)采用 WORD定位 , 堆棧段默認(rèn)采用 PARA定位 ?完整段定義偽指令的默認(rèn)定位屬性是 PARA, 其低4位已經(jīng)是 0, 所以默認(rèn)情況下數(shù)據(jù)段的偏移地址從0開始 段組合 ( bine) 屬性 ?指定多個邏輯段之間的關(guān)系 , 可為: PRIVATE 本段與其他段沒有邏輯關(guān)系 , 不與其他段合并 , 每段都有自己的段地址 。 這是 簡化段定義偽指令默認(rèn)的段組合 STACK 本段是堆棧的一部分 , 連接程序?qū)⑺?STACK段按照與 PUBLIC段的同樣方式進(jìn)行合并 。code39。data39。stack’來分別指名代碼段 、 數(shù)據(jù)段和堆棧段 , 以保持所有代碼和數(shù)據(jù)的連續(xù) 指定段寄存器偽指令 ASSUME 段寄存器:段名 [,段寄存器名:段名 , ...] ? 通知 MASM用指定的段寄存器來尋址對應(yīng)的邏輯段 , 即建立段寄存器與段的缺省關(guān)系 ? 在明確了程序中各段與段寄存器之間的關(guān)系后 ,匯編程序會根據(jù)數(shù)據(jù)所在的邏輯段 , 在需要時自動插入段超越前綴 。const39。vars39。進(jìn)行段組合 codeseg segment para public 39。 assume cs:codeseg,ds:datagroup,ss:stackseg 例題 - 1/3 start: mov ax,datagroup mov ds,ax 。ax=100 mov var1,ax 。ax=2 mov ax,offset data1 。ax=4 例題 - 2/3 assume ds:data2 mov ax,data2 mov ds,ax mov ax,var1 。ax=2 mov ax,4c00h int 21h codeseg ends end start 例題 - 3/3 段順序偽指令 .SEG 。按照微軟使用的標(biāo)準(zhǔn) DOS規(guī)定 .ALPHA 。data39。設(shè)定堆棧段起始段內(nèi)偏移地址 dw 200 dup(?) topsp equ this word 。code39。dseg既是數(shù)據(jù)段又是堆棧段 例題 - 1/2 start: mov ax,dseg mov ds,ax mov ss,ax
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1