[试题]

对内存单元中连续存放的20个ASCII字符进行转换,大写的“A—Z”转换成小写,小写的“a-z”转换成大写,其他字符变为00,结果存放在RESULT开始的内存单元中。部分程序已经在PROG1.ASM中给出,请编写BEGIN到END之间代码。

原有数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,结果要求从RESULT开始存放,由SAVE保存到OUTPUT1.DAT文件。

对程序必须进行汇编,并与10.OBJ连接产生PROG1.EXE执行文件,最终产生运行结果(无结果或结果不正确均不得分)。

部分源程序如下:

E.XTRN LOAD:FAR,SAVE:FAR

N EQU 20

STAC SEGMENT STACK

D.B 128DUP(?)

STAC ENDS

D.ATA SEGMENT

SOURCE DB N DUP(?)

RESULT DB N DUP(0)

NAME0 DB 'INPUT1.DAT', 0

NAME1 DB 'OUTPUT1.DAT', 0

D.ATA ENDS

C.ODE SEGMENT

A.SSUME 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 ;字节数

C.ALL LOAD ;从"IArPUT1.DAT"中读取数据

****BEGIN****

*****END*****

LEA DX,RESULT ;结果数据区首地址

LEA SI,NAME1 ;结果文件名

MOV CX,N ;结果字节数

C.ALL SAVE ;保存结果到文件

RET

START ENDP

C.ODE ENDS

E.ND 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。重复操作所有的元素。

参考答案与解析:

相关试题

实现ASCII码转换成字符的函数是()。

[单选题]实现ASCII码转换成字符的函数是()。A . STRING()B . ASC()C . STR()D . CHR$()

  • 查看答案
  • 当处于大写锁定状态下时,SHIFT键会将大写转换成小写。

    [判断题] 当处于大写锁定状态下时,SHIFT键会将大写转换成小写。A . 正确B . 错误

  • 查看答案
  • 当处于大写锁定状态下时,SHIFT键会将大写转换成小写。()

    [判断题]当处于大写锁定状态下时,SHIFT键会将大写转换成小写。()A.对B.错

  • 查看答案
  • 编一个程序,输入一个字符,如果是大写字母,就转换成小写字母,否则不转换。

    [问答题] 编一个程序,输入一个字符,如果是大写字母,就转换成小写字母,否则不转换。

  • 查看答案
  • 实现将大写字母转换成小写字母的函数是()。

    [单选题]实现将大写字母转换成小写字母的函数是()。A . Lower$B . Upper$C . Ucase$D . Lcase$

  • 查看答案
  • 将Z分数转换成T分数时,需要进行

    [单选题]将Z分数转换成T分数时,需要进行A.正态化转换 B.非正态化转换C.线性转换 D.非线性转换

  • 查看答案
  • CTOD()的功能是()。A、将字符型数据转换成日期型数据B、将日期型数据转换成

    [单选题]C.TOD()的功能是()。A.将字符型数据转换成日期型数据B.将日期型数据转换成字符型数据C.将字符型数据转换成数值型数据D.以上均错

  • 查看答案
  • 编写指令序列,如果AL寄存器存放的是小写字母,把它转换成大写字母,否则不改变AL

    [问答题] 编写指令序列,如果AL寄存器存放的是小写字母,把它转换成大写字母,否则不改变AL内容。

  • 查看答案
  • 函数Ucase(s)的功能是使参数s中所有的大写字母转换成小写字母。

    [判断题] 函数Ucase(s)的功能是使参数s中所有的大写字母转换成小写字母。A . 正确B . 错误

  • 查看答案
  • 对内存单元进行读操作后,该单元的内容()。

    [单选题]对内存单元进行读操作后,该单元的内容()。A . 变反B . 不变C . 随机D . 被修改

  • 查看答案