您的位置:首页 > 其它

汇编复习(从键盘上输入n个字符(n小于128)并按顺序存放在存储单元中,键入“Enter”键结束输入,然后按顺序在显示器上输出)

2019-01-06 16:43 204 查看
;从键盘上输入n个字符(n<128)并按顺序存放在存储单元中,键入“Enter”键结束输入;然后按顺序在显示器上输出(“Enter”键ASCII码为0DH)
data segment
msg db 13,10,"please input:$"
msg2 db 128 dup("$")
data ends

code  segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
lea dx,msg
mov ah,09h
int 21h
lea di,msg2
input:
mov ah,01h
int 21h
cmp al,0dh
jz quit
mov [di],al
inc di
cmp di,offset msg2+128
jz quit
jmp input
quit:
lea dx,msg2
mov ah,09h
int 21h
mov ah,4ch
int 21h
code ends
end start

思路

先输出msg提示用户输入,然后设置一个循环就是input那一段

循环跳出条件是要么按了回车


#####要么128个字符满了

如果两个条件都不满足,那么就将输入的字符保存进数据段的msg2里面,别忘了每次都要将di+1

如果满足退出跳出,则输出msg2 然后退出

下面练习一下debug工具

我们先-t运行到第一个int 21h位置,然后直接-p 这样就可以直接输入不然他还要进入一个子程序(emmm 应该是这样吧)

我这里输入了1和2 接下来我们看看数据段里面的数据
先-r (也可以不-r -t之后直接就有)等到inc di命令执行之后再查看 不然此时2应该还没保存进去

现在可以看到 di为14 so 输入 -d ds:0000

看到没1,2在0013和0014的位置

下面列一下常用的跳转指令

指令 解释 标志位
JZ(JE) 结果为0(或相等)则转移 ZF=1
JNZ(JNE) 结果不为0(或不相等) ZF=0
JC 结果有进位则转移 CF=1
JNC 结果无进位则转移 CF=0
JS 结果为负则转移 SF=1
JNS 结果为正则转移 SF=0
JO 结果溢出则转移 OF=1
JNO 结果不溢出则转移 OF=0
JP 结果为偶数个1则转移 PF=1
JNP 结果为奇数个则转移 PF=0

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐