汇编复习(从键盘上输入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那一段

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

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

在这里插入图片描述
#####要么128个字符满了
在这里插入图片描述

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

在这里插入图片描述

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

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

下面练习一下debug工具

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

在这里插入图片描述

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

在这里插入图片描述

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

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

看到没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

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

你可能感兴趣的:(学习,汇编复习)