未分类题

对内存单元中连续存放的20个ASCII字符进行转换,大写的“A—Z”转换成小写,小写的“a-z”转换成大写,其他字符变为00,结果存放在RESULT开始的内存单元中。部分程序已经在PROG1.ASM中给出,请编写BEGIN到END之间代码。
原有数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,结果要求从RESULT开始存放,由SAVE保存到OUTPUT1.DAT文件。
对程序必须进行汇编,并与10.OBJ连接产生PROG1.EXE执行文件,最终产生运行结果(无结果或结果不正确均不得分)。
部分源程序如下:
EXTRN LOAD:FAR,SAVE:FAR
N EQU 20
STAC SEGMENT STACK
DB 128DUP(?)
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP(?)
RESULT DB N DUP(0)
NAME0 DB 'INPUT1.DAT', 0
NAME1 DB 'OUTPUT1.DAT', 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STAC
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA DX,SOURCE ;数据区起始地址
LEA SI,NAMED ;原始数据文件名
MOV CX,N ;字节数
CALL LOAD ;从'IArPUT1.DAT'中读取数据
****BEGIN****
*****END*****
LEA DX,RESULT ;结果数据区首地址
LEA SI,NAME1 ;结果文件名
MOV CX,N ;结果字节数
CALL SAVE ;保存结果到文件
RET
START ENDP
CODE ENDS
END START
相关知识:
●定义符号伪指令
指令功能:给一个表达式分配一个符号名或给一个符号分配一个值。
指令格式:(i)符号EQU表达式(不允许符号重定义)
(ii)符号=表达式(允许符号重定义)
●数据定义伪指令
指令格式:
(i)[名字]DB操作数1[,操作数2[,...]](为每个操作数分配1个字节的空间)
(ii)[名字]DW操作数1[,操作数2[,...]](为每个操作数分配2个字节的空间)
(iii)[名字]DD操作数1[,操作数2[,...))(为每个操作数分配4个字节的空间)
(iV[名字]DQ操作数1[,操作数2[,...]](为每个操作数分配8个字节的空间)
(v)[名字]DT操作数1[,操作数2[,...]](为每个操作数分配10个字节的空间)
●段定义伪指令
指令格式:段名 SEGMENT [定位方式] [联系方式] ['类别')
使用段定义伪指令可以将程序和有关的数据信息定义在相应的段中。
●循环的实现
通过设置计数器初值,在完成一组操作后,修改计数器中的值,重新执行操作直到计
数器中的值为0。
例如:MOV CX,N
LI:

LOOP L1(短标号地址)
或:DEC CX
JNZ 11(短标号地址)
注意:本书学习要点讲过的内容,本章节不予赘述。
●字符的ASCII码
十六进制数“0”~“F”是连续的,它们的ASCII码不是连续的,但仍然有规律可循,“0”~“9”的ASCII码为30H~39H,“A”~“F”的ASCII码为41H~46H,“A”~“Z”的ASCII是从41H开始连续的,“a”~“z”的ASCII是从61H开始连续的。
编程方法:
第一步:分析程序要求的功能。
本程序要求完成以下功能:
(1)从数据文件INPUT1.DAT中读取20个8位无符号整数存放在SOURCE开始的内存单元中。
(2)将SOURCE开始的20个ASCII码进行判断,处理,并将结果存放在RESULT开始的内存单元中。
(3)将处理结果存放在0UWUT1.DAT文件
第二步:用相应的汇编程序来实现其功能。
(1)数据的读取和存人文件部分的实现,题目中已经给出。
(2)大小写判断转换处理,我们可根据英文大写字母“A~Z”和小写字母“a~z”的 ASCII码是连续的,并且同字母的大小写的ASCII码相差20H,可以直接在其ASCII码上加减20H进行大小写的转换。
处理过程就是,从数组中取来一个元素,先判断它是否是大写,若为大写,则直接减 20H变为小写;否则判断它是否为小写,若为小写,直接减20H变为大写;若大小写均不是,就赋值为0。重复操作所有的元素。

A.ASM中给出,请编写BEGIN到END之间代码。
B.DAT中读入SOURCE开始的内存单元中,结果要求从RESULT开始存放,由SAVE保存到OUTPUT1.DAT文件。
C.OBJ连接产生PROG1.EXE执行文件,最终产生运行结果(无结果或结果不正确均不得分)。
D.DAT',
E.DAT',
F.DAT'中读取数据
****BEGIN****
*****END*****
G...]](为每个操作数分配1个字节的空间)
(ii)[名字]DW操作数1[,操作数2[,...]](为每个操作数分配2个字节的空间)
(iii)[名字]DD操作数1[,操作数2[,...))(为每个操作数分配4个字节的空间)
(iV[名字]DQ操作数1[,操作数2[,...]](为每个操作数分配8个字节的空间)
(v)[名字]DT操作数1[,操作数2[,...]](为每个操作数分配10个字节的空间)
H.DAT中读取20个8位无符号整数存放在SOURCE开始的内存单元中。
I.DAT文件


【参考答案】

LEASISOURCE UCA DIRESULT MOV CXN LOOP1:MOV AL [SI] CMP AL 'A......

(↓↓↓ 点击下方‘点击查看答案’看完整答案 ↓↓↓)
热门 试题

未分类题
阅读以下说明和流程图,从供选择的答案中选出应填入流程图(n)处的字句写在对应栏内。[说明]以下是某图像二元树存储与还原算法的主要思想描述。设一幅2n×2n的二值图像,以:“1”表示黑像素点,以“0”表示白像素点。图像二元树结构表示依赖于图像的二元分割,即交替在X轴方向和Y轴方向上分割。先进行水平分割,分成两个2n-1×2n图像子块,然后进行垂直分割,分成4个2n-1×2n-1的正方形块,如此分割,直到子块只含同一像素点为止。如图8-8为一“E”字的二值图像,对其进行二元分割,相应的二元树如图8-9所示。根据图像二元树的0叶结点和1叶结点的数目,删除多者,保留少者。如“E”字图像的二元树0叶结点较多,裁剪后如图8-10所示。裁剪后图像二元树有4类结点,分别用二进制编码如下:◆ 左右儿子都有的结点,编码为11;◆ 仅有左儿子的结点,编码为10;◆ 仅有右儿子的结点,编码为01;◆ 叶结点,编码为00。存储时,先存储剩余叶结点的类型编码,二进制码00表示0叶结点,11表示1叶结点。再按层次顺序,自左至右存储裁剪后图像二元树各结点的编码。图像二元树的存储算法用C语言描述所定义的数据结构及函数如下:struct Node{ *图像二元树结点* street Node*Left;street Node*Righ t;char Pixel;}struct Node Queue[MaxLen]; *队列* InitQueue() *初始化队列Queue的函数; * EmptyQueue () *判断队列Queue是否为空的数,若空返回1,否则返回0; * AddQueue(Item) *将Item加到队列Queue的数; * GetQueue() *取队列Queue第一个元素的函数; * PutCode(Code) *写2位二进制码Code到文件的函数* 还原算法是存储算法的逆过程,将文件中的二进制码序列转换成图像二元树。还原算法的数据结构与函数与存储算法的相同,还原算法新增了一个函数GetCode ()。GetCode() *从文件中读2位二进制码的函数* [C程序]存储算法void Backup (char CutPixel,st ruct Node ImageTree)' *Cu tP ixel=0表示裁剪0叶结点* { InitQueue();AddQueue ( ImageTree ) ;PutCode ( 1-CutPixel ) ;While ( !EmptyQueue ( ) ){ TreeNode= GetQueue ( ) ;if (TreeNode→Left==NULL){ PutCode (0) ;continue:}Tl= TreeNode→Left;Tr= TreeNode→R igh t;if ( Tl→Left= = NULL && Tl→Pixel= = CutPixel )L=0;else{(1);AddQueue ( Tl ) ;}if ( Tr→Left= = NULL && Tr→Pixel= = CutPixel )R=0;else{(2)AddQueue (T) ;}(3)}}还原算法void Restore ( struct Node *TreeRoot ){ TreeRoot= ( strut Node*)malloc ( sizeof (struct Node)InitQueue ( );AddQueue ( TreeRoot ) ;CutPixel= 1- GetCode ( ) ;while ( ! EmptyQueue ( ) ){ TrecNode= GetQueue ( Queue ) ;NodeCode= GetCode ( ) ;switch ( NodeCode ){case 0:TreeNode→Left = NULL ;TreeNode→Right= NULL&
未分类题