|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
请在数据段中定义以下2个数组:
s db 100 dup(0)
t db 100 dup (0)
代码段中实现以下功能:
输入- -行字符(敲回车结束输入)并保存到数组s中,
其中回车转化成ASCI I码00h保存到数组中,
再把s中的每个元素逐个取出判断:
(1)若元素为小写字母则把它转化成大写并保存到数组t中;
(2)若元素为空格则丢弃该元素,不要保存到t中;
(3)若元素为其它字符则原样保存到t中;
最后输出t中的全部元素再输出回车换行。
提示:
(1)可以循环调用int 21h的01h功能实现一行字符的输入;
(2)可以循环调用int 21h的02h功能实现一行字符的输出;
(3) 数组s和t的下标可以分别用寄存器si、di表示;
求完整代码QAQ、
跪谢各位
本帖最后由 xieglt 于 2020-10-30 15:38 编辑
- assume cs:code
- data segment
- s db 100 dup(0)
- t db 100 dup(0)
- data ends
- code segment
- start:
- mov ax,data
- mov ds,ax
- mov es,ax
- lea di,s
- mov cx,99
- _input:
- mov ah,01
- int 21h
- ;输入回车结束
- cmp al,13
- je _is_Enter
- stosb
- loop _input
- _is_Enter:
- xor ax,ax
- stosb
- dec cx
- ;统计输入字符数,设置为循环计数
- sub cx,99
- not cx
- lea si,s
- lea di,t
- _s2t:
- ;从 s 取一个字符
- lodsb
- ;是否空格,是则跳转
- cmp al,32
- je _is_space
- ;是否 < 'a',是则跳转
- cmp al,'a'
- jl _isnot_lettle
- ;是否 > 'z',是则跳转
- cmp al,'z'
- jg _isnot_lettle
- ;是小写字母减32变成大写字母
- sub al,32
- _isnot_lettle:
- ;保存字符进t
- stosb
- ;忽略空格语句标号
- _is_space:
- ;循环
- loop _s2t
-
- ;输出换行回车
- mov dl,10
- mov ah,2
- int 21h
- mov dl,13
- mov ah,2
- int 21h
-
- ;循环输出t中的字符,遇到0结束
- lea si,t
- _output:
- lodsb
- test al,al
- je _over
- mov dl,al
- mov ah,2
- int 21h
- jmp _output
- _over:
- ;输出换行回车
- mov dl,10
- mov ah,2
- int 21h
- mov dl,13
- mov ah,2
- int 21h
- mov ax,4c00h
- int 21h
- code ends
- end start
复制代码
|
|