试题要求如下: 请编制程序 其功能是:内存中连续放着20个ASCII字符 如果是小写字母A~
问题详情
试题要求如下:
请编制程序,其功能是:内存中连续放着20个ASCII字符,如果是小写字母A~Z之间的字符,请把它们转换成相应的小写字母:若为其他字符,均转换成ASCII字符"NUL" (00H)。
例如:
内存中有:41H ("A"),42H ("B"),5EH,64H,48H……
结果为: 61H ("a"),62H ("b"),00H("NUL"),00H("NUL"),00H("NUL")……
部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,运算的结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。在BEGIN和AND之间编程完成要求的功能。
对程序进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果。
试题程序:
EXTRN LOAD: FAR, SAVE: FAR
N EQU 20
STAC SEGMENT STACK
DB 128 DUP ()
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP()
RESULT DB N DUP(0FH)
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
LEA DX, SOURCE ; 数据区起始地址
LEA SI, NAME0 ; 原始数据文件名
MOV CX, N ; 字节数
CALL LOAD ; 从"INPUT1.DAT"中读取数据
LEA SI, SOURCE
LEA DI, RESULT
; **** BEGIN ****
; **** END ****
LEA DX, RESULT ; 结果数据区首址
LEA SI, NAME1 ; 结果文件名
MOV CX, L+I ; 结果字节数
CALL SAVE ; 保存结果到文件
RET
START ENDP
CODE ENDS
END START请帮忙给出正确答案和分析,谢谢!
参考答案
正确答案:MOV CX NNEXT: MOV AL [SI]CMP AL 'A'JB PROCMP AL 'Z'JA PROXOR AL 20HJMP PSHPRO: MOV AL 00HPSH: MOV [DI] ALINC DIINC SILOOP NEXT
MOV CX, NNEXT: MOV AL, [SI]CMP AL, 'A'JB PROCMP AL, 'Z'JA PROXOR AL, 20HJMP PSHPRO: MOV AL, 00HPSH: MOV [DI], ALINC DIINC SILOOP NEXT 解析:本程序要求将A~Z之间的字母转换成相对应的小写字母。DI中存放着的是转换后的偏移地址,每次加1;AL的作用是相当于一个指针,每次SOURCE与它相加;CX是一个循环计数器,每次减1。