組合語言小考

回上一畫面
課程名稱:組合語言

第二次小考


共12題 請用答案紙作答

1.C語言程式如下: 20%

#include <stdlib.h>

#include <dos.h>

main()

{

int i,k;

scanf("%d,%d",&i, &k);

if (i>k)

k=i;

printf("%d",k);

}

試寫出其相對應之以C語言程式呼叫組合語言函式之作法。虛框中之內容以組合語言函式形式寫出。

試寫出其相對應之組合語言程式, 並將虛框中之內容以MACRO形式寫出。20%

Ans:

(1) C語言主程式:

#include <stdio.h>

#include <dos.h>

main()

{

extern int CAL(int,int);

int i,k;

scanf("%d,%d",&i,&k);

k=CAL(i,k);

printf("%d",k);

}

組合語言函式:

.model small

.code

public _CAL

_CAL proc

push bp

mov bp,sp

mov ax, [bp+4]

cmp ax, [bp+6]

jg undo

mov ax,[bp+6]

undo:

pop bp

ret

_CAL endp

end

(2) 相對應之組合語言程式

TITLE

.MODEL SMALL

includelib ios.lib

EXTRN puts:near,indec:near,outdec:near,newline:near

.STACK 100h

abc MACRO

cmp ax,i

jg undo

mov ax,i

undo:

call newline

ENDM

.DATA

i DW 0

.CODE

begin:

call indec ; 輸入一個無號數值

mov i,ax ; 存入變數a11

call newline

call indec ; 輸入一個無號數值

abc

call outdec ; ┘

mov ah,4ch ; ┐結束程式

int 21h ; ┘

END begin

2.有些bmp及tiff之圖檔並未有副檔名, 試寫一程式讀取輸入影像檔之資料並印出其影像檔格式(bmp或tiff) 於螢幕,輸入檔名後如果檔案開啟不成功則印出錯誤訊息, 。

(註: bmp之圖檔前兩字元為BM, tiff之圖檔前兩字元為I I)20%

Ans:

讀取輸入影像檔格式(bmp或tiff) 資料之程式:

TITLE pro42

.MODEL SMALL

EXTRN puts:near,indec:near,outdec:near,newline:near,putc:near,gets:near

includelib ios.lib

; Function Request 0FH

; Open file and Read

;

;==========================================================

.STACK 100h

.DATA

msg1 DB 'FILE NAME?',0

msg2 DB 'FILE NOT FOUND',0

msg3 DB 'FILE HANDLE No.=',0

msg4 DB 'THIS IS A TIFF FILE ',0

msg5 DB 'THIS IS A BMP FILE ',0

File DB 36 DUP (?)

DTA DB 2 DUP (?)

.CODE

begin:

mov ax,@data ; ┐ds 初值化

mov ds,ax ; ┘

mov si,OFFSET msg1 ; ┐印出提示字串

call puts ; ┘

mov di,OFFSET File ; ┐印出提示字串

call newline

call gets ; ┘

mov dx,OFFSET File ; ┐印出提示字串

mov ah,3dh

mov al,0h ; ┘

int 21h

JC ERROR ;開啟不成功則跳出並印出錯誤訊息

mov si,OFFSET msg3 ; ┐印出提示字串

call puts ; ┘

call outdec ; ┘

call newline

mov bx,ax

mov dx,OFFSET DTA

mov ah,3fh

mov cx,2 ;

int 21h

mov ah,3eh

int 21h

mov si,OFFSET DTA ; ┐印出提示字串

call puts ; ┘

call newline

cmp DTA[0],'I'

jne nottiff

cmp DTA[1],'I'

jne nottiff

mov si,OFFSET msg4 ; ┐印出提示字串

call puts ; ┘

nottiff:

cmp DTA[0],'B'

jne notbmp

cmp DTA[1],'M'

jne notbmp

mov si,OFFSET msg5 ; ┐印出提示字串

call puts ; ┘

notbmp:

mov ah,4ch ; ┐結束程式

int 21h ; ┘

ERROR:

mov si,OFFSET msg2 ; ┐印出提示字串

call puts ; ┘

mov ah,4ch ; ┐結束程式

int 21h ; ┘

END begin

3.有一24 24中文字形檔, 其字碼為A451 ,其內容如下

00000000: 00 10 00 00 1C 10 20 18 - 1C 18 18 38 0C 18 30 06 ...... ....8..0.

00000010: 18 60 07 18 40 02 18 80 - 00 19 18 3F FF FC 00 18 .`..@......?....

00000020: 00 00 18 00 00 18 00 00 - 18 00 00 18 06 FF FF FF ................

00000030: 00 18 00 00 18 00 00 18 - 00 00 18 00 00 18 00 00 ................

00000040: 18 00 00 18 00 00 10 00 - ........

請問該檔案有幾個bytes? 6%

Ans: 72 Bytes

4.承上題﹐請問該檔案為哪一個字?6%

Ans: 該檔案為 "半" 字。

5.試寫出一組合語言程式﹐可設定螢幕解析度為320X200X16之繪圖模式。6%

6.承上題﹐在螢幕中央秀出藍顏色之一條垂直直線。6%

Ans:

; 5,6兩題解答

STACK SEGMENT STACK

DW 1024 DUP(?)

STACK ENDS

;

CODE SEGMENT

PROG PROC FAR

ASSUME CS:CODE,SS:STACK

; INITIAL THE PROGRAM

PUSH DS

MOV AX,0

PUSH AX

;

MOV AH,0 ;SET GRAPHIC MODE

MOV AL,0DH ;FOR VGA CARD

INT 10H

;

MOV BL,1 ;SET INITIAL COLOR

MOV CX,160 ;COLUMN#

MOV DX,0 ;ROW#

AGAIN:

MOV AH,0CH ;WRITE PIXEL DOT

MOV AL,BL ;SET COLOR

INT 10H

INC DX

CMP DX,199

JB AGAIN ;NO -- LOOP

RET

MOV AH,00h ;SET TEXT MODE

MOV AL,03h ;FOR VGA CARD

INT 10H

;

PROG ENDP

CODE ENDS

END PROG

7.試討論組合語言程式中開啟檔案File Handle之作法。6%

8.試討論C語言程式呼叫組合語言函式時傳值與不傳值之不同作法。6%

9.試討論C語言程式內含組合語言時與使用保留字 _AX,_BX..... 之不同作法。6%

10.試討論C語言程式與組合語言之優缺點, 一般採取什麼作法較適當?6%

11.試討論螢幕解析度之設定及Hecules,VGA,SVGA之演變?6%

12.試討論巨集(macro)與程序(PROC) 作法之不同。6%