aaa
(1) 現(xiàn)有程序段如下:
MOV? ?? AL,0
MOV? ?? BL,1
MOV? ?? CX,10
L: ADD ?AL,BL
INC? BL
LOOP?L
請回答:該程序段完成的功能是什么?執(zhí)行完后AL的值是多少?
這段匯編代碼的作用是將寄存器 AL 的初始值設(shè)置為 0,寄存器 BL 的初始值設(shè)置為 1,然后將 BL 的值加到 AL 上,并且每次循環(huán)結(jié)束 BL 的值加 1,循環(huán)執(zhí)行 10 次。最終 AL 的值將是 1 + 2 + 3 + ... + 10,即 55。
(2)現(xiàn)有程序段如下:
MOV? BL,AL
MOV? CL,4
SHR? BL,CL
MOV? A,BL
AND? AL,0FH
MOV? B,AL
請回答:該程序段完成的功能是什么?如果AL的初值為56H,則A和B的值分別是多少?
?
該程序段完成的功能是將AL寄存器中的數(shù)值分為兩部分,高4位移動到BL寄存器中,低4位保留在AL寄存器中,然后分別將BL和AL的值存入A和B寄存器中。
如果AL的初值為56H,那么經(jīng)過程序段的處理后,A寄存器中的值為5H,B寄存器中的值為6H。
(3)閱讀以下程序:
data_seg segment
num dw 10
a dw 12,14,9,10,3,81,10,4,88,66
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 , num
??????dec cx
loop1:?mov dx , cx
??????mov bx , 0
loop2:?mov ax ,a[bx]
??????cmp ax,a[bx+2]
??????jge continue
?????xchg ax,a[bx+2]
??????mov a[bx],ax
continue: add bx ,2
??????loop loop2
? ????mov cx ,dx
??????loop loop1
mov ax ,4c00h
??????int 21h
main endp
code_seg ends
end start
請回答:該程序段完成的功能是什么?程序執(zhí)行完后數(shù)組a的值是什么?
?
該程序段完成了對數(shù)組a進行冒泡排序的功能。程序執(zhí)行完后,數(shù)組a的值為{3, 4, 9, 10, 10, 12, 14, 66, 81, 88}。
(1)什么是匯編語言?匯編語言與高級語言相比有什么優(yōu)缺點?
?
匯編語言是一種低級語言,它直接使用計算機CPU指令進行編程。匯編語言的代碼是由一系列符號、助記符和地址表示的,而這些符號和助記符都與CPU指令一一對應(yīng)。匯編語言可以讓程序員直接控制計算機底層硬件,提高程序的運行效率和執(zhí)行速度。
與高級語言相比,匯編語言的優(yōu)點主要有:
1. 直接操作硬件
2. 執(zhí)行速度快
3. 空間效率高
4. 可以訪問機器的底層功能
缺點則主要有:
1. 難以維護
2. 編寫周期短
3. 可讀性低
(2)請簡要描述匯編語言程序的開發(fā)過程。
1.根據(jù)任務(wù)需求設(shè)計算法,繪制流程圖;
2.編寫源程序;
3.匯編源文件生成目標(biāo)文件;
4.連接目標(biāo)文件生成可執(zhí)行文件。
(3)子程序的參數(shù)傳遞有哪幾種方式?請簡單描述每種傳遞方式的特點。
一、是利用累加器或寄存器,
二、是利用存儲器,
三、是利用堆棧;
當(dāng)相互傳遞的數(shù)據(jù)較少時,采用寄存器傳遞方式可以獲得較快的傳遞速度;
當(dāng)相互傳遞的數(shù)據(jù)較多時,宜采用存儲器或堆棧方式傳遞;
如果是子程序嵌套時,最好是采用堆棧方式。
?
(4)什么叫宏匯編?宏匯編技術(shù)與子程序技術(shù)相比有哪些優(yōu)缺點?
宏匯編是一種基于匯編語言的高級語言,它允許程序員使用宏指令來定義常用的代碼段,并在需要時使用這些宏指令來生成匯編代碼。宏匯編可以大大簡化程序的編寫,提高代碼重用性和可維護性。
相比之下,子程序技術(shù)是一種基于函數(shù)的編程技術(shù),通過將代碼分解成多個函數(shù)模塊來實現(xiàn)可重用性和可維護性。與宏匯編相比,子程序技術(shù)更加通用化和面向?qū)ο蠡?/p>
宏匯編的優(yōu)點包括:
1. 更高的可讀性和可維護性
2. 更高的代碼重用性
3. 更高的可移植性
宏匯編的缺點包括:
1.?可能會導(dǎo)致代碼膨脹
2. 對于復(fù)雜的程序,可能會造成可讀性降低
3. 不易于編寫和調(diào)試
(5)CPU處理中斷的過程包括哪些處理步驟?
中斷請求、中斷響應(yīng)、中斷服務(wù)和中斷返回
?
四?計算與編程題(兩小題,共15分)
(1)設(shè) DS=2000H, BX=0100H, SI=0002H, (20100H)=12H, (20101H)=34H,(20102H)= 56H, (20103H)= 78H, (21200H)= 2AH, (21201H)= 4CH,(21202H)=B7H,(21203H)=65H,試說明下列各條指令執(zhí)行完后AX寄存器中的內(nèi)容是多少(寫出計算過程)?(本題6分)
1)MOV? ?AX,1200H
?????AX=1200H
?
?
?
?
?
2)MOV? ?AX,[BX+1100H]
???20000H+1200H=21200H,
???????AX=4C2AH
?
?
?
?
?
3)MOV? ?AX,[BX+SI]
???????20000H+0100H+0002H=20102H
????????AX=7856H
(2)設(shè)字符串的段地址、偏移地址和長度已經(jīng)分別存于DS、SI和CX中,要統(tǒng)計其中字符“P”的個數(shù),并存于DL中。試把空白處填上適當(dāng)?shù)闹噶睿恳豢瞻字惶钜粭l指令,本題4分)
MOV AL,‘P’
MOV DL,0
NEXT:CMP AL,[SI]
???JNZ/JNE CONT ????????????????
INC DL
CONT:INC SI
????LOOPNEXT ???????????????
?
(3)編寫一段程序,實現(xiàn)將ARRAY數(shù)組中的50個數(shù)求和,并將和存入字變量S中。(本題5分)
assume cs:code, ds:data
data segment
????ARRAY db 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
????????????????db 21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37
????????????????db 38,39,40,41,42,43,44,45,46,47,48,49,50
????COUNT db $-ARRAY
????S ??dw ?
data ends
code segment
????start:
????????????????????mov ax, data
????????????????????mov ds, ax
????????????????????mov di, offset ARRAY
????????????????????mov cl, COUNT
????????????????????sub ax,ax
????lp: ????????add al, byte ptr [di];
????????????????????jnc done
????????????????????inc ah
????done: ??????????inc di
????????????????????loop lp
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????mov S, ax
????????????????????mov ax, 4c00h
????????????????????int 21h
code ends
end start
1.7 下列各數(shù)均為用十六進制表示的8位二進制數(shù),請說明當(dāng)它們分別被看作是用補碼表示的數(shù)或字符的ASCII碼時,它們所表示的十進制數(shù)及字符是什么?
(1) 4F (2) 2B (3) 73 (4) 59
答:(1) 4FH表示的十進制數(shù)為 79,4FH表示的字符為O;
2.1
在80x86微機的輸入/輸出指令中,I/O端口號通常是由DX寄存器提供的,但有時也可以在指令中直接指定00~FFH的端口號。試問可直接由指令指定的I/O端口數(shù)。
答:可直接由指令指定的I/O端口數(shù)為256個。
2.3在IBM PC機的存儲器中存放信息如右下圖所示。試讀出30022H和30024H字節(jié)單元的內(nèi)容,以及30021H和30022H字單元的內(nèi)容。
30020H 12H
30021H 34H
30022H ABH
30023H CDH
30024H EFH
答:30022H字節(jié)單元的內(nèi)容為ABH;30024H字節(jié)單元的內(nèi)容為EFH。30021H字單元的內(nèi)容為AB34H;30022H字單元的內(nèi)容為CDABH。
3.1 給定(BX)=637DH,(SI)=2A9BH,位移量D=7237H,試確定在以下各種尋址方式下的有效地址是什么?
(1) 立即尋址
(2) 直接尋址
(3) 使用BX的寄存器尋址
(4) 使用BX的簡接尋址
(5) 使用BX的寄存器相對尋址
(6) 基址變址尋址
(7) 相對基址變址尋址
答:(1) 操作數(shù)在指令中,即立即數(shù);
(2) EA=D=7237H;
(3) 無EA,操作數(shù)為(BX)=637DH;
(4) EA=(BX)=637DH;
(5) EA=(BX)+D=0D5B4H;
(6) EA=(BX)+(SI)=8E18H;
(7) EA=(BX)+(SI)+D=1004FH;超過了段的邊界,最高進位位丟失,因此EA=004FH。
試寫出執(zhí)行下列指令序列后BX寄存器的內(nèi)容。執(zhí)行前(BX)=6D16H。
MOV CL, 7
SHR BX, CL
答:(BX)=00DAH。
4.1 指出下列指令的錯誤:
(1) MOV AH, BX ;寄存器類型不匹配
(2) MOV [BX], [SI] ;不能都是存儲器操作數(shù)
(3) MOV AX, [SI][DI] ;[SI]和[DI]不能一起使用
(4) MOV MYDAT [BX][SI], ES:AX ;AX寄存器不能使用段超越
(5) MOV BYTE PTR [BX], 1000 ;1000超過了一個字節(jié)的范圍
(6) MOV BX, OFFSET MYDAT [SI] ;MYDAT [SI]已經(jīng)是偏移地址,不能再使用OFFSET
(7) MOV CS, AX ;CS不能用作目的寄存器
(8) MOV ECX, AX ;兩個操作數(shù)的數(shù)據(jù)類型不同
7.1 編寫一條宏指令CLRB,完成用空格符將一字符區(qū)中的字符取代的工作。字符區(qū)首地址及其長度為變元。
答:宏定義如下:
CLRB MACRO N, CFIL
MOV CX, N
CLD
MOV AL, ‘ ’ ;;取空格符的ASCII碼
LEA DI, CFIL
REP STOSB
ENDM
8.3 寫出指令將一個字節(jié)數(shù)據(jù)輸出到端口25H。
答:指令為:OUT 25H, AL
9.1 INT 21H的鍵盤輸入功能1和功能8有什么區(qū)別?
答:鍵盤輸入功能1:輸入字符并回顯(回送顯示器顯示) (檢測Ctrl_Break);
鍵盤輸入功能8:輸入字符但不回顯(也檢測Ctrl_Break)。
?