C_SEG ENDS
SEGMENT PARA ?CODE? ASSUME CS: CODESG
FAR BX, 0 AX, X[BX] AX, Y[BX] AX, 3 ES: R[BX], AX
;不同段的求和子程序
;******************************************** CODESG
COMPUTE PROC
MOV MOV
REPEAT:
MOV ADD SUB MOV RET
COMPUTE ENDP
CX, COUNT
;----------------------------------------------------------------- CODESG
ENDS END
TITLE
START
;主程序
;******************************************** (3) 主程序和COMPUTE不在同一程序模块中的程序如下:
ADDITION
EXTRN PUBLIC D_SEG X Y D_SEG E_SEG R E_SEG C_SEG
COMPUTE: FAR COUNT, X, Y, R
SEGMENT PARA ?DATA? DW 10H DW 10H DUP (?) DW 10H DUP (?) ENDS
SEGMENT PARA ?DATA? DW 10H DUP (?) ENDS
SEGMENT PARA ?CODE?
FAR DS AX, AX AX AX, D_SEG DS, AX AX, E_SEG ES, AX
FAR PTR COMPUTE
;调用求和子程序
ASSUME CS: C_SEG, DS: D_SEG, ES: E_SEG
START:
PUSH SUB POP MOV MOV MOV MOV CALL RET
ADDITION ENDP
21
;-------------------------------------------------------------- COUNT
;--------------------------------------------------------------
;-------------------------------------------------------------- ADDITION PROC
C_SEG ENDS END
START
;-----------------------------------------------------------------
;*************************************************************** TITLE
COMPUTE COMPUTE
SEGMENT PARA ?CODE? ASSUME CS: CODESG
COMPUTE PROC
MOV MOV
REPEAT:
MOV ADD SUB MOV RET
COMPUTE ENDP
;----------------------------------------------------------------- CODESG
ENDS END
9.1 对应黑白显示器屏幕上40列最下边一个象素的存储单元地址是什么?
答:对应黑白显示器屏幕上40列最下边一个象素的存储单元地址是:B000:0F78H 9.2 写出把光标置在第12行,第8列的指令。
答:指令如下:
MOV MOV MOV MOV INT
DH, 0BH DL, 07H BH, 0 AH, 2 10H
;置光标功能调用
;0BH=12-1 ;07H=8-1
;********************************************
FAR BX, 0 AX, X[BX] AX, Y[BX] AX, 3 ES: R[BX], AX
;不同模块的求和子程序
CX, COUNT
;求和子程序
EXTRN PUBLIC CODESG
COUNT:WORD, X:WORD, Y:WORD, R:WORD
;-----------------------------------------------------------------
9.3 编写指令把12行0列到22行79列的屏幕清除。
答:指令如下:
MOV MOV MOV MOV MOV MOV MOV INT
AL, 0 BH, 07 CH, 12 CL, 0 DH, 22 DL, 79 AH, 6 10H
;左上角行号 ;左上角列号 ;右下角行号 ;右下角列号 ;屏幕上滚功能调用
;清除屏幕
22
9.4 编写指令使其完成下列要求。
(1) 读当前光标位置
(2) 把光标移至屏底一行的开始
(3) 在屏幕的左上角以正常属性显示一个字母M 答:指令序列如下:
(1)
MOV MOV INT
(2)
MOV MOV MOV MOV INT
(3)
MOV MOV MOV INT MOV MOV MOV MOV MOV INT
AH, 3 BH, 0 10H DH, 24 DL, 0 BH, 0 AH, 2 10H AH, 2 DX, 0 BH, 0 10H AH, 9 AL, ?M? BH, 0 BL, 7 CX, 1 10H
;在当前光标位置显示一个字符
;设置光标位置
;设置光标位置
;读当前光标位置,返回DH/DL=光标所在的行/列
9.5 写一段程序,显示如下格式的信息:
Try again, you have n starfighters left.
其中n为CX寄存器中的1~9之间的二进制数。 答:程序段如下:
MESSAGE CONT ;
┇
ADD CL, 30H MOV LEA MOV INT
答:
MOV
CONT, CL AH, 9 21H
;保存ASCII码
;显示一个字符串的DOS调用
DX, MESSAGE DB ?Try again, you have ? DB n
DB ? starfighters left.$?
10.1 写出指令,选择显示方式10H,并将背景设为绿色。
AH, 00H
AL, 10H 10H AH, 10H AL, 00H BH, 10H BL, 0
;背景设为绿色(02H也可以,是用DEBUG调试出来的)
;选择0号调色板
23
MOV INT MOV MOV MOV MOV
;选择显示方式10H(16色图形)
INT
设置背景色也可用:
MOV MOV MOV INT
10H AH, 0BH BH, 0 BL, 8 10H
;设置背景色和调色板 ;设置背景色功能 ;绿色背景
10.2 如何使用INT 10H的功能调用改变显示方式?
答:在AH中设置功能号00H,在AL中设置显示方式值,调用INT 10H即可。 10.3 VGA独有的一种显示方式是什么?
答:像素值为640×480,可同时显示16种颜色,这种显示方式(12H)是VGA独有的。 10.4 对于EGA和VGA显示适配器,使用显示方式13H时(只有VGA有),显示数据存在哪里?
答:显示数据存在显示存储器里。
10.5 对于VGA的显示方式13H时存放一屏信息需要多少字节的显存?
答:需要64000个字节。
10.6 利用BIOS功能编写图形程序:设置图形方式10H,选择背景色为蓝色,然后每行(水平方向)显示一种颜
色,每4行重复一次,一直到整个屏幕都显示出彩条。 答:程序如下:
TITLE codeseg
GRAPHIX.COM segment
assume cs:codeseg, ds:codeseg, ss:codeseg org 100h
main
proc far mov ah, 00h mov al, 10h int 10h mov ah, 0bh mov bh, 00h mov bl, 01h int 10h mov ah, 0bh mov bh, 01h mov bl, 00h int 10h mov bx, 0 mov cx, 0 mov dx, 0
line:
mov ah, 0ch mov al, bl int 10h inc cx cmp cx, 640 jne line mov cx, 0
;选择显示方式10h(16色图形)
;背景设为蓝色
;设置调色板0# ;显存的第0页 ;起始列号为0列 ;起始行号为0行 ;写像素点
;起始列号为0列
24
inc bl and bl, 03h inc dx cmp dx, 350 jne line int 20h
main codeseg
endp ends end main
10.7 修改10.6题的程序,使整个屏幕都显示出纵向的彩条。
答:程序如下:
TITLE codeseg
GRAPHIX.COM segment
assume cs:codeseg, ds:codeseg, ss:codeseg org 100h
main
proc far mov ah, 00h mov al, 10h int 10h mov ah, 0bh mov bh, 00h mov bl, 01h int 10h mov ah, 0bh mov bh, 01h mov bl, 00h int 10h mov bx, 0 mov cx, 0 mov dx, 0
line:
mov ah, 0ch mov al, bl int 10h inc dx cmp dx, 350 jne line mov dx, 0 inc bl and bl, 03h inc cx cmp cx, 640 jne line int 20h
main
;只显示四种颜色(因此保留最低两位)
;选择显示方式10h(16色图形)
;背景设为蓝色
;设置调色板0# ;显存的第0页 ;起始列号为0列 ;起始行号为0行 ;写像素点
;起始行号为0行
;只显示四种颜色(因此保留最低两位)
endp
25