单字符,字符串的输入换行输出

1.通过键盘输入一个字符,在屏幕上换行显示出来

DATAS SEGMENT
    ;此处输入数据段代码  
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码
   
    MOV AH,1
    INT 21H
    MOV BL,AL;输入AL,用BL存放
    
    MOV DL,13;回车(十进制:13,十六进制:0D)
    MOV AH,2
    INT 21H
    
    MOV DL,10;换行(十进制:10,十六进制:0A)
    MOV AH,2
    INT 21H
    
    MOV DL,BL;输出通键盘输入的单字符
    MOV AH,2
    INT 21H
    
    
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

2.通过键盘输入一个字符串,并通过换行显示出来 

CHANGELINE DB 13,10,'$' 

13是回车,10是换行,‘$'表示到了字符串尾,不需要打印了

BUFFER DB 60,?,60 DUP(?)

定义的缓冲区,用来存放字符串,BUFFER是自己定义的变量名,DB表示双字节型变量,第一个60可以理解为数组首字节存放的数据,紧接着存放一个问号,问号默认值是0,60 DUP(?)表示60个连续存放的0.

AH=09 显示字符串      DS:DX=串地址

AH=0A 键盘输入到缓冲区   DS:DX=缓冲首地址

 lea:装入有效地址的意思,它的操作数就是地址,常见的几种用法:

1、lea eax,[addr]

就是将表达式addr的值放入eax寄存器,示例如下:

lea eax,[401000h]; 将值401000h写入eax寄存器中

lea指令右边的操作数表示一个精指针,上述指令和mov eax,401000h是等价的

2、lea eax,dword ptr [ebx];将ebx的值赋值给eax

3、lea eax,c;其中c为一个int型的变量,该条语句的意思是把c的地址赋值给eax;

INPUT 是通过 int 21h 的 0ah (10) 功能输入字符串的,看看这个中断功能调用的说明,其首字节是后面缓冲区的大小,次字节则是返回时输入字符的个数,然后才是存放输入的字符,所以,要通过 INPUT 访问输入的字符,就得 INPUT+2。 

DATAS SEGMENT
    ;此处输入数据段代码 
    CHANGELINE DB 13,10,'$' 
    BUFFER DB 60,?,60 DUP(?)
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码
    
    LEA DX,BUFFER;接守字符串
    MOV AH,0AH
    INT 21H
    
    
    MOV DX,OFFSET CHANGELINE ;    偏移量给寄存器DX
    MOV AH,09H
    INT 21H
    
    LEA DX,BUFFER+2
    MOV AH,09H
    INT 21H
    
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值