組合語言期中考

閉書考 共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 中。