閉書考 共11題 請用答案紙作答
課程名稱:組合語言
1. 試寫出一程式可以印出從Dec1到Dec127的ASCII字元對照表
﹐程式執行後即印出Dec、Hex、及ASCII字元之對照結果。20%
解:
;*********************************
; ASCII.ASM
; 印出從Dec1到Dec127的ASCII字元對照表
;*********************************
.MODEL small
includelib ios.lib
EXTRN newline:near,outdec:near,outhex:near,puts:near
.DATA
msg1 DB 'Dec: ',0
msg2 DB ' Hex: ',0
msg3 DB ' ASCII: ',0
.CODE
start:
mov ax,@data ; ┐ds 初值化
mov ds,ax ; ┘
mov cx,127
again: mov ax,128
sub ax,cx
call newline
mov ah,00h
mov si,OFFSET msg1 ; ┐印字串msg1
call puts ; ┘
call outdec
mov si,OFFSET msg2 ; ┐印字串msg2
call puts ; ┘
call outhex
mov ah,02h
mov dl,al
mov si,OFFSET msg3 ; ┐印字串msg3
call puts ; ┘
int 21h
LOOP again
mov ah,4ch
int 21h
.STACK
END start
2. 有一C語言程式如下: 20%
#include
#include
main()
{
int i,k;
k=0;
for ( i=1; i<255; i++ )
{
k= i+k;
}
printf("%d",k);
}
試寫出其相對應之組合語言程式
解:
;*********************************
;*********************************
.MODEL small
includelib ios.lib
EXTRN newline:near,outdec:near,outhex:near,puts:near
.DATA
.CODE
start:
mov ax,0
mov cx,1
again: add ax,cx
inc cx
cmp cx,255
jc again
call outdec
mov ah,4ch
int 21h
.STACK
END start
3. 試寫一程式找出十個數值之最大值及最小值,程式執行後輸入十個整數﹐
即
印出此十個數值﹐並算出此十個數值之最大值及最小值等於若干。20%
解:
TITLE Max--Min
.MODEL SMALL
EXTRN puts:near,indec:near,outdec:near,newline:near
includelib ios.lib
.STACK 100h
.DATA
msg1 DB 'pleaxe input nine numbers : ',0
msg2 DB 'The input nine numbers are: ',0
msg3 DB ' ',0
msg4 DB 'The maximum value is : ',0
msg5 DB 'The minimum value is : ',0
num1 DB 10 DUP(?)
.CODE
begin:
mov ax,@data ; ┐ds 初值化
mov ds,ax ; ┘
mov si,OFFSET msg1 ; ┐印出提示字串
call puts ; ┘
call newline
mov cl,10
xor si,si
again1:
call indec
mov num1[si],al
inc si
call newline
loop again1
call newline
mov si,OFFSET msg2 ; ┐印出提示字串
call puts ; ┘
mov cl,10
xor di,di
again2:
mov al,num1[di]
call outdec
inc di
mov si,OFFSET msg3 ; ┐印出提示字串
call puts ; ┘
loop again2
call newline
call newline
mov cl,10
xor si,si
again3:
cmp al,num1[si]
jnc cont1
mov al,num1[si]
cont1:
inc si
loop again3
mov si,OFFSET msg4 ; ┐印出提示字串
call puts ; ┘
call outdec
call newline
mov cl,10
xor si,si
again4:
cmp al,num1[si]
jc cont2
mov al,num1[si]
cont2:
inc si
loop again4
mov si,OFFSET msg5 ; ┐印出提示字串
call puts ; ┘
call outdec
call newline
mov ah,4ch
int 21h
END begin
4. 有一些特殊功能的暫存器:例如BP 基礎指標(Base Pointer)暫存器
可用作 SS 區段的一個相對基礎位置。 DI 目的索引(Destination Index)
暫存器可用來提供相對於 ES 區段之目的指標 。請問IP暫存器、SI暫存器、
SP暫存器之功用為何 ?
解:
IP 指令指標(Intruction Pointer)暫存器
與 CS 配合使用,可追蹤程式的執行過程。
SP 堆疊指標(Stack Pointer)暫存器
與 SS 配合使用,可指向目前的堆疊位置。
BP 基礎指標(Base Pointer)暫存器
可用作 SS 區段的一個相對基礎位置。
5. 在DEBUG中﹐可能是哪一個命令會在螢幕上顯示如下之訊息?
1FED:0100 5F 5E 5D C2 02 00 01 00-00 00 0C 00 0D 00 0B 00 ............
1FED:0110 0F 00 10 00 0E 00 BA 36-15 B9 04 00 E9 E5 F2 50 .......6.......P
1FED:0120 B8 01 00 50 2B C0 50 E8-91 55 0B C0 79 08
B4 ...P+.P..U..y..@
1FED:0130 E8 A7 2D F9 EB 04 E8 10-06 F8 C3 E8 89 FB 74 01 ..-...........t.
1FED:0140 C3 B8 71 00 E9 61 2E A9-10 00 75 1A E8 78 FB ..q..a....u..x..
1FED:0150 00 00 C3 A1 A0 30 A3 86-30 B8 0D 00 E9 1C 2E .....0..0.......
1FED:0160 3E 12 2F 3C 73 ED 57 FF-36 12 2F B8 27 00 E8 D3 s.W.6./.'...
1FED:0170 0D BF 25 00 74 0D 2B FF-B8 C2 00 E8 C6 0D
75 ..%.t.+.......u.
解:
D100
6. 承上題﹐若我想在記憶位置 100 到 17F 填入 00,前後應當哪些命令才可在
螢幕上顯示如下之訊息?
1FED:0100 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1FED:0110 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1FED:0120 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1FED:0130 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1FED:0140 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1FED:0150 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1FED:0160 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1FED:0170 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
解:
-F100 17F 00
-D100
7. 在DEBUG中﹐我們可以使用組合語言指令直接來編寫程式,假設現在
輸入 A100 再陸續
輸入 MOV AH,9
輸入 MOV DX,109
輸入 INT 21
輸入 INT 20
輸入 DB 'HOW ARE YOU $'
請問此程式執行後會在螢幕上顯示何種結果?
解:
HOW ARE YOU
8. 我想要將一個在 DOS環境下的獨立的外部程式 A.COM 載入到
DEBUG
中﹐則應當用哪些命令來作?
解:
nA.com
L
9. 會把兩個運算元的內含值互換的是哪一個組合語言指令? 會把 AL 暫存器中
的位元組(8 位元 )轉換成字組(16 位元 ),並放於 AX 暫存器中的是
哪一個組合語言指令?
解:
CBW 指令會把 AL 暫存器中的位元組(8 位元 )轉換成字組
(16 位元 ),並放於 AX 暫存器中。答MOVSX、MOVZX亦可。
XCHG 指令會把兩個運算元的內含值互換。 常用於需要暫時保留某個暫存器
中的內含值時。
10. 在DEBUG中﹐可能是哪一個命令會在螢幕上顯示如下之訊息?
1FED:0100 B90001 MOV CX,0001
1FED:0103 B200 MOV DL,00
1FED:0105 B402 MOV AH,02
1FED:0107 CD21 INT 21
1FED:0109 FEC2 INC DL
1FED:010B E2F8 LOOP 0105
1FED:010D CD20 INT 20
-
解: U100,10E
11.承上題﹐請問此程式執行後會在螢幕上顯示何種結果?
解:
(印出笑臉)
附錄一
你可以善用以下之副程式:
bin2hex...........bin2hex dec$2bin..........DEC$2BIN
dec2bin...........DEC2BIN gets..............gets
indec.............indec indec$............indec$
indec32...........indec32 indec32$..........indec32$
newline...........newline outbin............outbin
outdc32$..........outdc32$ outdec............outdec
outdec$...........outdec$ outdec32..........outdec32
outdec64..........outdec64 outhex............outhex
putc..............putc puts..............puts
各副程式功能如上課所習用者﹐例如OUTDEC 程序執行將 AX 中的 16 位元
無號數以十進位顯示在螢幕﹐而傳入值(待印值)在 AX 中。