組合語言作業


回目錄

作業三

1.有一C語言程式如下:
/***********************************************/

/* */

/* 8253 MODE_4 APPLICATION */

/* NOTE : SET 8253 MODE OUT=HIGH */

/* START COUNT OUT=HIGH */

/* COUNT END OUT=LOW(1 CLK) OUT=HIGH*/

/* 8253 MODE_4 IS SOFTWAVE TIGGERED STROBE */

/***********************************************/

#include

#include

#define COUNT_0 0x308

#define COUNT_1 0x309

#define COUNT_2 0x30A

#define CONTROL_8253 0x30B

main()

{

outportb(CONTROL_8253,0x38); /* SET 8253 COUNT_0 MODE_4 */

outportb(COUNT_0,0X05); /* WRITE LSB COUNT=5 */

outportb(COUNT_0,0X00); /* WRITE MSB COUNT=0 */

}

試寫出其相對應之組合語言程式

2.有一C語言程式如下:
/********************************************/

/* */

/* : SIMULATION PERIPHERAL */

/* SIGNAL TO 8255 */

/* METHOD : USING 8255 MODE_1 PORT_A=IN */

/* PORT_B=OUT */

/* */

/********************************************/

#include

#define PORT_A 0x300

#define PORT_B 0x301

#define PORT_C 0x302

#define CONTROL_WORD 0x303

#define ESC 27

main()

{

int a; /* 請參考 .ASM 之說明 */

int KEY;

outportb(CONTROL_WORD,0xbc); /* 設定 8255 MODE_1 */

while(1)

{

KEY=getche(); /* PRESS ANY KEY RETURN DOS*/

if(KEY==ESC) break;

while ((inportb(PORT_C)&&0x20) == 0x20)

{ /* PC5是否為1 (BUFFER已滿) */

a=inportb(PORT_A); /* 讀取 A PROT 的資料 */

outportb(PORT_B,a); /* 將 A PROT 所讀取的資料 */

} /* 輸出到 B PROT */

}

}

試寫出其相對應之組合語言程式

3.有一C語言程式如下:
#include

#include

main()

{

int i,j,k;

k=0;

for ( i=1; i<10000; i++ )

{

for ( j=1; j<10000; j++ )

{

k= j;

}

}

printf("%d",k);

}

試寫出其相對應之組合語言程式﹐
並比較兩者之執行檔大小及執行速度。

4. 試寫出一組合語言程式﹐可在繪圖模式中秀出各種顏色之直條圖形,如下圖﹐直線之起始位置及長度、寬度可設定﹐末了並更改游標形狀為全欄位反白。

5. 試寫出一組合語言程式﹐可在繪圖模式中秀出紅顏色之三角圖形,如下圖。

6. 試寫出一組合語言程式﹐可在繪圖模式中秀出藍顏色之圓形圖形,如下圖。

7. 試寫出一組合語言程式﹐可在繪圖模式中秀出你的學號。

8. 試寫出一組合語言程式﹐可在繪圖模式中秀出你的中文姓名。