汇编语言课后习题解答 联系客服

发布时间 : 星期三 文章汇编语言课后习题解答更新完毕开始阅读

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