共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%