汇编语言程序设计教程(第二版)卜艳萍著(6)

2018-12-05 20:56

15. 在数据段的BUFFER到BUFFER+24单元中存放着一个字符串,请判断该字符串中是

否存在数字,如有则把X单元置1,如无数字则将X单元置0。 ? 将字符串依次取到寄存器中;

? 将字符的ASCII码与30H~39H比较,在此范围则为数字; ? 发现数字,则置X单元,并结束搜索。

16. 从键盘上输入两个字符存于A,B单元中,比较它们的大小,并在屏幕上显示两个数的

大小关系。

STACK SEGMENT STACK DW 256 DUP(?) STACK ENDS DATA SEGMENT

A DB ? B DB ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,SS:STACK,DS:DATA START:MOV AX,DATA MOV DS,AX

MOV AH,1 INT 21H

MOV A,AL MOV AH,1 INT 21H MOV B,AL CMP A,AL JGE AGB MOV DL,‘B’ MOV BL,‘A’

JMP DISP

AGB:MOV DL,‘A’

MOV BL,‘B’ DISP:MOV AH,2 INT 21H MOV DL,‘>’

INT 21H

MOV DL,BL INT 21H

MOV AH,4CH

INT 21H CODE ENDS END START

17. 内存BUF开始的单元中存放6个无序数,请用冒泡法将它们按递增顺序排序。

26

STACK SEGMENT STACK DW 256 DUP(?)

STACK ENDS DATA SEGMENT

A DW 34,78,65,21,66,90 DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,SS:STACK,DS:DATA START:MOV AX,DATA MOV DS,AX

MOV CX,6 DEC CX

A1:MOV DI,CX

MOV BX,0 A2:MOV AX,A[BX]

CMP AX,A[BX+2]

JLE A3

XCHG AX,A[BX+2] MOV A[BX],AX A3:ADD BX,2

LOOP A2

MOV CX,DI LOOP A1

MOV AH,4CH

INT 21H CODE ENDS

END START

18. 在内存缓冲区中有两个64位数,试编程实现这两个64位数相减的运算,要求定义至少

一个过程。

STACK SEGMENT STACK DW 256 DUP(?) STACK ENDS DATA SEGMENT

DAT1 DQ 122354AF76432AB3H

DAT2 DQ 1187ABC76FE54DD1H DAT3 DQ ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,SS:STACK,DS:DATA START:MOV AX,DATA MOV DS,AX

CALL SUBB

MOV AH,4CH

27

INT 21H

SUBB PROC NEAR

MOV BX,OFFSET DAT1 MOV SI,OFFSET DAT2 MOV DI,OFFSET DAT3

MOV CX,4

CLC

AGAIN:MOV AX,[BX]

SBB AX,[SI]

MOV [DI],AX INC BX INC BX INC SI INC SI INC DI INC DI

LOOP AGAIN RET

SUBB ENDP

CODE ENDS END START

19. 设计一个子程序,它能完成在屏幕上输出空行的功能,空行的行数在CX寄存器中。试

将此功能用于你的程序中。 DISP PROC NEAR LOP:MOV DL,0DH MOV AH,2 INT 21H

MOV DL,0AH INT 21H LOOP LOP RET

DISP ENDP

20. 定义两个过程,分别实现以下功能: (1)非压缩BCD码转换为压缩BCD码 BCDTR1 PROC NEAR PUSH AX PUSH BX PUSH CX PUSH SI

PUSH DI

MOV SI,OFFSET BUF1 ;非压缩BCD码 MOV DI,OFFSET BUF2 ;压缩BCD码 MOV AL,[SI]

28

AND AL,0FH MOV BL,[SI+1] AND BL,0FH MOV CL,4 SHL BL,CL OR AL,BL MOV [DI],AL POP DI POP SI POP CX POP BX POP AX

RET

BCDTR1 ENDP

(2)压缩BCD码转换为非压缩BCD码 BCDTR2 PROC NEAR PUSH AX PUSH CX PUSH SI

PUSH DI

MOV SI,OFFSET BUF1 ;非压缩BCD码 MOV DI,OFFSET BUF2 ;压缩BCD码 MOV AL,[DI] AND AL,0FH MOV [SI],AL MOV AL,[DI] MOV CL,4 SHR AL,CL MOV [SI+1],AL POP DI POP SI POP CX POP AX RET

BCDTR2 ENDP

21. 编程(包含子程序)实现对两个数组求和的功能,设两个数组的类型相同,数组元素个

数也相同。

? 依次取出两个数组的元素,按序相加,结果存放在和数组中; ? 设置一个计数值,控制加法的次数。

22. 编写一个完整的程序,要求把含有22H,32H,42H,52H四个字符数据的数据区复制

15次。

? 定义字符数据区和待复制的区域; ? 复制功能可以用串传送来实现;

29

? 15次复制用循环方式控制。

23. 编写程序,求1~150之间的能同时被2和3整除的整数之和。

? 从1开始判断每个数是否能被2整除,不能被2整除则更新为下一个数; ? 能被2整除则再判断是否能被3整除,如能整除则累加该数;

? 当该数更新为150时,则停止。

第7章 系统功能调用及其应用

1. 什么叫DOS系统功能调用?举一个例子说明实现DOS系统功能调用的一般步骤。

在多用户和多任务的环境下,与硬件有关的ROMBIOS资源只允许操作系统这个特殊用户使用,用户只可以使用INT 21H功能调用,包括字符输入、字符输出、磁盘控制、文件管理、记录操作、目录操作、动态存储分配等功能。

中断类型21H是DOS功能调用的主体,它提供了众多的非常强大的功能供用户调用,功能号由寄存器AH提供。在发INT 21H软中断之前,应该先准备好入口参数(也称调用参数),并将功能号送入AH寄存器中。

例如:由键盘输入单个字符

MOV AH,1 ;系统调用功能号送AH INT 21H

输入字符的ASCII码在AL寄存器中,同时字符显示在屏幕上。

2. 什么叫BIOS系统功能调用?举一个例子说明实现BIOS系统功能调用的一般步骤。 IBMDOS.COM包括一个文件管理程序和一些处理程序,在DOS下运行的程序可以调用这些处理程序。IBMDOS.COM是通过把信息传送给IBMBIO.COM,形成一个或多个BIOS调用,来完成DOS功能调用的。

BIOS存放在内存的最高端,是由功能模块组成的,可以通过软中断指令调用这些功能模块,故又称为BIOS中断调用。ROM BIOS使用了中断向量码00H?1FH。

例如:键盘I/O中断调用INT 16H 该中断调用16H有三个功能,功能号0?2。 (AH)= 0为从键盘读字符到AL寄存器中。

入口参数:无。

出口参数:AL中为键入字符的ASCII码,AH为键入字符的扫描码。 调用方法为: MOV AH,0 INT 16H

3. 在图形方式下,与显示图形相关的系统功能调用主要有哪些?

ROM BIOS显示器中断服务(INT 10H)

服务号 00H 01H 02H 03H 04H 05H

功 能 设置显示方式 设置光标大小 设置光标位置 读取光标坐标 读取光笔位置 设置当前显示页 服务号 0DH 0EH 0FH 10H 11H 12H 功 能 读象素 以TTY方式写字符 读取当前显示方式 显示寄存器控制 字符发生器控制 替换选择 30


汇编语言程序设计教程(第二版)卜艳萍著(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:微观经济学考试试题及参考答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: