匯編語言輸出字符的方法 材料匯編目錄怎么弄?
答:資料匯編目錄的操作步驟如下。1.將光標放在前言頁的最后一個字符后,單擊插入-分隔符-下一頁-確定。2.在下一個生成的頁面上制作目錄,點擊插入-引用-索引和目錄-目錄-顯示級別設(shè)置為1-確定。3.刪
答:資料匯編目錄的操作步驟如下。1.將光標放在前言頁的最后一個字符后,單擊插入-分隔符-下一頁-確定。2.在下一個生成的頁面上制作目錄,點擊插入-引用-索引和目錄-目錄-顯示級別設(shè)置為1-確定。
3.刪除 "前言和生成的目錄中的行。4.更改頁碼(1)將光標放在前言頁,點擊插入-頁碼-格式-將數(shù)字格式改為羅馬數(shù)字(ⅰ,ⅱ,ⅲ)-確定。(2)將光標放在這一頁目錄中,點擊插入-頁碼-去掉首頁頁碼前的勾號-格式-將起始頁碼改為0-確定。(3)右鍵單擊目錄-更新字段-僅更新頁碼。
匯編語言中的標簽受某些規(guī)則的約束:
1.不能是程序集中的關(guān)鍵字,如DB、DW、
首先,dos必須支持中文顯示。
匯編語言通過調(diào)用控制臺輸出程序?qū)⒁粋€字符輸出到顯示區(qū)。比如要顯示字符A,就需要將字符A的ASCII碼傳送給顯示程序(這個顯示程序是BIOS系統(tǒng)中的一個顯示子程序,是一個軟中斷調(diào)用)。
普通的中文編碼是指兩個特殊的ASCII碼顯示一個漢字。得到要顯示的漢字的兩個ASCII碼后,可以連續(xù)調(diào)用顯示程序,將這兩個ASCII碼依次提交給顯示程序。
1.注冊
共有16個32位寄存器,即:
4個數(shù)據(jù)寄存器(EAX、EBX、ECX、EDX)。
2個索引和指針寄存器(ESI和EDI);2個指針寄存器(ESP和EBP)。
6個段寄存器(ES、CS、SS、DS、FS、GS)。
1指令指針寄存器(EIP);1個標志寄存器(EFlags)。
2.數(shù)據(jù)寄存器
數(shù)據(jù)寄存器主要用于存儲操作數(shù)和運算結(jié)果等信息,從而節(jié)省了讀取操作數(shù)時占用總線和訪問存儲器所需的時間。
一個32位CPU有四個32位通用寄存器:EAX、EBX、ECX和EDX。對低16位數(shù)據(jù)的訪問不會影響高16位。
這些低16位寄存器分別命名為AX、BX、CX和DX,與之前CPU中的寄存器一致。
四個16位寄存器可以分成八個獨立的8位寄存器(ax: ah ~ al,bx: BH ~ bl,CX: ch ~ cl: dx: dh~dl).
每個寄存器都有自己的名稱,可以獨立訪問。程序員可以使用這個 "可分離 "靈活處理字的數(shù)據(jù)寄存器特性/
字節(jié)的信息。
AX和al通常被稱為累加器,使用累加器的運算可能需要較少的時間。累加器可用于乘法、除法、輸入/輸出和其他運算。
它們經(jīng)常被使用。
BX被稱為基址寄存器,可以用作內(nèi)存指針。
CX被稱為計數(shù)寄存器,用于控制循環(huán)和字符串操作期間的周期數(shù)。在位操作中,移位多個位時,使用cl。
指示偏移量的位數(shù)。
DX稱為數(shù)據(jù)寄存器,可用于參與默認操作數(shù)的運算,并在乘法和除運算時存儲I/O的端口地址。
在16位CPU中,AX、BX、CX和DX can t用作基址和變址寄存器來存儲存儲單元的地址,但在32位CPU中。
它的32位寄存器EAX、EBX、ECX和EDX不僅能傳輸數(shù)據(jù)、暫存數(shù)據(jù)和保存算術(shù)和邏輯運算結(jié)果,而且
作為指針寄存器,這些32位寄存器用途更廣。
3.變址寄存器
32位CPU有兩個32位通用寄存器ESI和EDI,其低16位對應(yīng)于前一個CPU中的SI和DI,以及低16位數(shù)據(jù)
訪問不會影響高16位數(shù)據(jù)。
ESI、EDI、SI、DI稱為變址寄存器,主要用來存儲一個段中存儲單元的偏移量,它們可以用來實現(xiàn)各種存儲器。
操作數(shù)的尋址為訪問不同地址形式的存儲單元提供了方便。
索引寄存器不能劃分為8位寄存器。作為通用寄存器,它還可以存儲算術(shù)邏輯運算的操作數(shù)和運算結(jié)果。
它們可以作為通用的內(nèi)存指針,在字符串操作指令的執(zhí)行過程中對它們有特殊的要求,它們也有特殊的
功能。
4.指針式計量器
32位CPU有兩個32位通用寄存器EBP和ESP,其中低16位對應(yīng)于前一個CPU中的BP和SP,低16位。
根據(jù)訪問,不影響高16位數(shù)據(jù)。
EBP、ESP、BP、SP稱為指針寄存器,主要用來存儲堆棧中存儲單元的偏移量,它們可以用來實現(xiàn)各種存儲器。
操作數(shù)的尋址為訪問不同地址形式的存儲單元提供了方便。
指針寄存器不能劃分為8位寄存器。作為通用寄存器,它還可以存儲算術(shù)和邏輯運算的操作數(shù)和運算結(jié)果。
它們主要用于訪問堆棧中的存儲單元,并規(guī)定:
BP是基址指針寄存器,可以直接訪問堆棧中的數(shù)據(jù)。
SP是棧指針寄存器,只能訪問棧頂。
5.分段寄存器
根據(jù)存儲器分段的管理模式來設(shè)置分段寄存器。存儲單元的物理地址由段寄存器的值和偏移量組成。
,以便將兩個位數(shù)較少的值合并成一個可訪問的值。求更大物理空間的內(nèi)存地址。
32位CPU有六個段寄存器,如下所示:
CS:代碼段寄存器ES:附加段寄存器
DS:數(shù)據(jù)段寄存器FS:附加段寄存器
SS:堆棧段寄存器GS:附件段寄存器
在一個16位CPU系統(tǒng)中,只有4個段寄存器,所以程序在任何時候最多可以直接訪問4個正在使用的段。
在32位微機系統(tǒng)中,它有6個段寄存器,所以在這種環(huán)境下開發(fā)的程序最多可以同時訪問6個段。
32位CPU有兩種不同的工作模式:實模式和保護模式。在每種模式中,段寄存器的作用是不同的,相關(guān)的規(guī)定
簡要描述如下:
實模式:段寄存器CS、DS、ES和SS與前一CPU中相應(yīng)的段寄存器以及存儲單元的邏輯具有相同的含義
地址仍然是 "段地址:偏移地址 "。為了訪問某個內(nèi)存段中的數(shù)據(jù),必須使用段寄存器和存儲單元的偏移地址。
保護模式:在這種模式下,情況要復(fù)雜得多。裝入段寄存器的不再是段值,而是一個名為 "選擇器和。
6.指令指針寄存器
32位CPU將指令指針擴展到32位,并將其記錄為EIP。EIP的低16位與先前CPU中的IP具有相同的功能。
指令指針EIP和IP是代碼段中存儲下一次要執(zhí)行的指令的偏移地址。在具有預(yù)取指令功能的系統(tǒng)中,指令將在下一次執(zhí)行。
指令行通常被預(yù)取到指令隊列中,除非有分支,所以在理解它們的功能時不考慮指令隊列的存在。
條件。
在實模式下,因為每個段的最大范圍是64KB,所以EIP的高16位必須全部為0。此時,它相當于只使用它的低16位。
位IP來反映程序中指令的執(zhí)行順序。
7.標志寄存器
1.運算結(jié)果標志位。共6個,包括:CF進位標志、PF奇偶標志、AF輔助進位標志、ZF零標志、
溢出標志位的SF符號標志位。
2.狀態(tài)控制標志位。一共三個,包括:TF跟蹤標志,IF中斷許可標志,DF方向標志。
以上標志位在第七章都有提及,這里不再贅述?,F(xiàn)在,讓我們 讓我們來談?wù)?2位標志寄存器中添加的四個標志位。
1.輸入輸出特權(quán)標志IOPL。
IOPL由兩個二進制位表示,也稱為I/O特權(quán)級別字段,它指定執(zhí)行I/O指令所需的特權(quán)級別。如果當前
的特權(quán)級別小于或等于IOPL的值,則可以執(zhí)行I/O指令,否則將出現(xiàn)保護異常。
2.嵌套任務(wù)標志NT。
NT用于控制中斷返回指令I(lǐng)RET的執(zhí)行。具體規(guī)定如下:
(1)當NT0時,用保存在堆棧中的值恢復(fù)EFlags、CS和EIP,并執(zhí)行例行中斷返回操作。
(2)NT1時,通過任務(wù)轉(zhuǎn)換實現(xiàn)中斷返回。
3.重啟標志RF。
RF用于控制是否接受調(diào)試故障。規(guī)定:當RF0時,表示接受,否則拒絕。
4.虛擬8086模式徽標。
如果VM1,則表示處理器工作在虛擬8086模式,否則,處理器工作在通用保護模式。
8、32位地址尋址模式
最后說說32位地址的尋址。前面我們研究了16位地址的尋址,在32位微機系統(tǒng)中有五種。
本文提供了一種更加靈活、方便、復(fù)雜的存儲器尋址方法,進一步擴大了存儲器地址的尋址范圍。
當使用16位寄存器訪問存儲單元時,只有基址寄存器(BX和BP)和變址寄存器(SI和DI)可以用作。
偏移地址的一部分,但用32位寄存器尋址時,就沒有這種限制了。所有32位寄存器(EAX、EBX、ECX、
EDX、ESI、EDI、EBP和ESP)都可以是偏移地址的組成部分。
使用32位地址偏移尋址時,偏移地址可分為三部分:
1.32位基址寄存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP)。
2.一個32位索引寄存器(EAX、EBX、ECX、EDX、ESI、EDI和EBP),可以乘以1、2、4和8。
3.一個8位至32位的偏移常數(shù)。
例如,指令:MOVEBX,[EAX EDX * 2 300]
Eax是基址寄存器,edx是索引寄存器,300H是偏移常數(shù)。
以上三個部分可以任意組合,可以省略其中的一兩個。
以下是一些32位地址尋址指令:
Mov ax,[123456]
Mov eax
Mov ebx,[ecx*2]
Mov [[EAX EDX * 8300]顯式段寄存器是GS。
Mov ax,[esp]默認段寄存器是SS。