汇编输入输出(单个字符以及字符串)

简单的汇编代码演示

1、输入输出

输入输出主要有两个中断调用,分别为INT 16H 和INT 21H

1.1 INT 16H(ROM BIOS中断)

原理:
16H中断服务子程序提供了多个功能,每个功能对应一个功能号码,调用他们的方法是

功能号->AH
INT 16H
功能号功能返回参数
0等待从键盘读字符AL=字符的ASCII码,AH=扫描码
1读键盘缓冲区字符若ZF=1,表示缓冲区空;否则表示缓冲区不空,则AL=ASCII值,AH=扫描码
2返回键盘状态字AL=键盘状态字节

相关示例代码(可以跑起来):

主要是从键盘中读取一个字符

DATAS  SEGMENT
    CHAR DB ?
DATAS  ENDS

STACKS  SEGMENT
      DB  128 DUP (?)
STACKS  ENDS

CODES  SEGMENT
     ASSUME    CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX

    MOV AH,0    ;进行输入
    INT 16H
    MOV CHAR,AL

    mov AH,2    ;进行输出
    MOV DL,CHAR
    INT 21H

    MOV AH,4CH
    INT 21H
CODES  ENDS
    END  START
1.1 INT 21H(DOS中断)

原理:
功能号发送AH寄存器,调用参数所求的位置,然后发送INT 21H系统功能调用中断
主要的功能号如下图所示:

功能号调用参数说明
1AL=输入字符串的ASCII值等待从标准输入设备(通常为键盘)输入一个字符,把接受到的字符的ASCII码值送给AL,并显示到显示器的当前光标位置。该功能识别Ctrl-C键并做相应处理
2DL=输出字符的ASCII值该输出功能也使光标跟随移动
0AHDS:DX指向自定义的输入缓冲区首地址从标准输入设备(通常为键盘)输入一串字符到用户定义的缓冲区,直到按下Enter键为止。在接受的同时显示到屏幕上,并且识别Ctrl-C键,也处理DOS编辑器

示例代码:

;输出hello world
;data数据段定义
data segment
  string db 'hello world','$' ;切忌串结束符$
data ends

;代码段定义
code segment
;程序开始
start:
  mov ax,data  ;将数据段段地址装入AX寄存器
  mov ds,ax ;将数据段段地址通过通用寄存器AX装入DS
  mov dx,offset string ;将串的段内地址装入DX
  mov ah,09h ;调用DOS的09H号功能,传入参数DS:DX=串地址,'$'结束字符串
  int 21h
  mov ah,4ch ;调用DOS的4CH号功能,带返回码结束,返回码存在于AL
  int 21h
code ends  ;代码段定义结束
end start  ;程序结束

运行结果如下:

2、字符串的输入

这里用到了上面DOS中断的0AH功能
可以将一段字符串读入并显示在屏幕上,代码如下

DATAS SEGMENT
    buffer db 60;定义缓冲区长度
           db ? ;预留实际输入字符个数的技术单元
           db 60 dup(?);设DS已是buffer的段基址
DATAS ENDS

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

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX

    mov ah,0ah;接受一串字符
    lea dx,buffer
    int 21h
    ;此处输入代码段代码
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START
  • 23
    点赞
  • 112
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值