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

;从键盘上输入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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值