INT 10H NEXT:CMP DX,245 JE EXIT
MOV CX,0 LINE:MOV AH,0CH MOV AL,03H INT 10H INC CX CMP CX,640 JNE LINE INC DX JMP NEXT EXIT:MOV AH,4CH INT 21H CODE ENDS END START
11.编写一个INT 55H的软中断处理程序,实现响铃功能,并设置相应得中断向量。 答: DATA SEGMENT DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA START:MOV AX,DATA MOV DS,AX
MOV AL,55H ;取原中断向量 MOV AH,35H INT 21H PUSH ES
PUSH BX ;存原中断向量段址 PUSH DS ;存原中断向量偏移量 MOV DX,OFFSET RING ;新偏移量送DX MOV AX,SEG RING
MOV DS,AX ;新段地址送DS MOV AL,55H MOV AH,25H
INT 21H ;写入新的中断向量 POP DS
STI ;开中断 ?
HERE:JMP HERE
POP DX ;恢复原中断向量 POP DS MOV AL,55H MOV AH,25H INT 21H
MOV AH,4CH INT 21H RING PROC NEAR PUSH AX PUSH DX MOV DX,100
IN AL,61H AND AL,11111100B TRIG:XOR AL,2
OUT 61H,AL ;61H端口的0,1两位置1,发声 MOV CX,1000
DELAY:LOOP DELAY
DEC DX JNZ TRIG
POP DX POP AX IRET RING ENDP CODE ENDS END START
12.进行中断程序设计时,主程序要做那些工作?以打印机为例说明。
答:主程序要做的工作有:保存原有中断号对应的中断向量;设置新中断向量;开中断;恢复原有的中断向量。例略。
13.利用BIOS和DOS调用编程实现一个简单的打字程序。要求把从键盘上接收的字符显示在屏幕上,同时送往打印机输出,在键盘上按下Ctrl+Break组和键时结束程序,返回DOS。
(1) 试用查询程序编程。(2) 试用中断方式编程。 答:(1) 查询方式 CODE SEGMENT
ASSUME CS:CODE
START:MOV DX,37AH ;打印机控制寄存器 MOV AL,08H ;联机命令 OUT DX,AL ;初始化打印机 MOV CX,1000
INIT1:LOOP INIT1 ;延迟,维持初始化信号一段时间 MOV AL,0CH
OUT DX,AL ;结束初始化,保持联机 MOV DX,379H
NEXT:MOV AH,1 ;读取并显示字符 INT 21H MOV DL,AL MOV AH,2 INT 21H
WAIT1:IN AL,DX ;读取打印机状态寄存器
TEST AL,80H
JZ WAIT1 ;若打印机忙,循环等待 MOV DX,378H
OUT DX,AL ;AL中数据送打印机数据寄存器 MOV DX,37AH
MOV AL,0DH ;选通打印机 OUT DX,AL DEC AL
OUT DX,AL ;恢复正常
JMP NEXT ;继续输入下一字符 MOV AH,4CH INT 21H CODE ENDS END START (2) 中断方式
CODE SEGMENT
ASSUME CS:CODE
START:MOV AH,1 ;输入字符 INT 21H
MOV DL,AL
MOV AH,2 ;显示字符 INT 21H
MOV AH,5 ;打印字符 INT 21H
JMP START ;下一字符
EXIT:MOV AX,4C00H
INT 21H
CODE ENDS
END START
第9章 C语言与汇编语言混合编程
1.什么是混合编程,汇编语言与C语言在混合编程时应注意什么问题? 答:将汇编语言代码嵌入到C语言中进行程序设计就是混合编程。 应注意的问题:
(1) 嵌入式汇编程序的指令格式 (2) 嵌入式汇编程序的编译和连接
(3) 汇编指令和C语言间对函数、变量及各中参数的共用问题,即接口问题 (4) C语言调用汇编模块的编程规则及变异连接方法
2.汇编语言与C语言混合编程有哪两种方式,各自的特点是什么? 答:嵌入式汇编方式:特点是在C语言程序中直接嵌入汇编语言指令。
模块调用方式:特点是C语言和汇编语言分别编写独立的模块,分别产生目标代码,然后连接生成一个完整的可执行文件。
3.说明在C语言环境下嵌入汇编语言指令格式。
答:⑴逐条嵌入格式:嵌入的各汇编指令代码前面都要加上“asm”关键字, 每行以分号或换行符结束。⑵成组嵌入格式:嵌入的各汇编指令代码放在同一个asm代码块中,代码块从“{”开始,到“}”结束,由“asm”关键字标识。 4.说明在嵌入式汇编程序中访问C程序变量的一般方法。 答:直接使用该变量名即可。
5.在Visual C环境下利用嵌入式汇编指令,完成对两个C变量的求和,结果由C程序显示。
答: main() {
int sum; int var1=5; int var2=6; __asm{
mov eax,var1 add eax,var2 mov sum,eax }
printf(“%d”,sum); }
6.在Visual C程序中输入两个整数,然后调用汇编子程序对两个数求差,结果在主程序中显示。
答: main() {
int result,var1,var2;
scanf(“%d,%d\\n”,&var1,&var2); __asm{
mov eax,var1 sub eax,var2 mov result,eax }
printf(“%d”,result); }
7.在Visual C程序中编写一个嵌入式汇编排序函数,C语言主程序提供待排序的数据并显示排序后的结果。
答:用起泡方法从大到小排序
main() {
int a[5]={2,-8,9,3,6}; int n = 5; __asm{
lea ebx,a mov ecx,n dec ecx loop1:mov edx,ecx
相关推荐: