<>字符串输入

  字符串输入通过调用DOS功能的0AH号功能实现,需要用户指定一个输入缓冲区存放输入的字符串。缓冲区一般定在数据段,其定义格式如下

假设字符串缓冲区的偏移地址在DX中

字节位置作用
[DX]第一个字节用户定义的缓冲区长度
[DX + 1]第二个字节实际输入的字符数(不包括回车), 由0AH号功能自动填入
[DX + 2]第三个字节DOS从该字节(第三个字节)开始存放输入的字符, 缓冲区的总长度 = 缓冲区长度 + 2
在调用该功能前, 应把输入缓冲区的起始偏移地址预置于DX寄存器

<>字符串显示

  字符串显示通过调用DOS功能的09H号功能实现,该功能要求,被显示的字符串必须以 ‘$’ 结尾,如果想让显示的字符串换行,
则应在字符串结束加上回车和换行的ASCII码,0DH 和 0AH

<>举例

* 显示Hello World DATA SEGMENT WORD PUBLIC 'DATA' STRING DB 'Hellow, World!',
0DH, 0AH,'$' DATA ENDS EXTRA SEGMENT WORD PUBLIC 'EXTRA' EXTRA ENDS CODE
SEGMENT WORD PUBLIC'CODE' TERMINATE PROC MOV AH, 4CH INT 21H TERMINATE ENDP
ASSUME CS:CODE, DS:DATA, ES:EXTRA START: MOV AX, DATA MOV DS, AX MOV AX, EXTRA
MOV ES, AX MOV DX, OFFSET STRING MOV AH, 09H INT 21H CALL TERMINATE CODE ENDS
END START
* 从键盘输入一个2个数字, 将它转变为一个十位数, 并再转换为字符, 输出 DATA SEGMENT WORD PUBLIC 'DATA' ORG
00H TEN DB 10D SUM DB 00H DATA ENDS STACK SEGMENT WORD PUBLIC'STACK' STACK ENDS
CODE SEGMENT WORD PUBLIC'CODE' INITIIALIZE PROC ;用来初始化段寄存器的过程 MOV AX, STACK MOV
SS, AX MOV AX, DATA MOV DS, AX RET INITIIALIZE ENDP TERMINATE PROC;用来退出程序的过程
MOV AH, 4CH INT 21H;因为程序直接退出, 可以不需要加RET RET TERMINATE ENDP PRINTLN PROC ;换行的过程
PUSH AX PUSH DX;过程中要用到这两个寄存器, 先把原来的值存到栈里 MOV AH, 2 ;功能号2是字符显示 MOV DL, 0DH ;
DL寄存器存放打印字符, 这里是0D是换行的意思 INT 21H;中断操作, 进行打印字符 MOV DL, 0AH ;0A是光标指向第一个字符的意思 INT
21H;中断操作 POP DX POP AX ;将原来的值再放回对应的寄存器 RET ;过程结束, 返回 PRINTLN ENDP NUMBER_OUTPUT
MACRO NUMBER_ADDRESS PUSH AX PUSH BX PUSH CX PUSH DX MOV AX,[NUMBER_ADDRESS]
XOR CX, CX DIVISION: IDIV[TEN] XOR BX, BX MOV BL, AH ADD BL, 48 PUSH BX MOV AH,
0 INC CX CMP AX, 0 JNE DIVISION OUTPUT: XOR AX, AX POP AX MOV DX, AX MOV AH, 2
INT 21H LOOP OUTPUT POP DX POP CX POP BX POP AX ENDM ASSUME CS:CODE, SS:STACK,
DS:DATA START: CALL INITIIALIZE;输入数字字符转变为数值存入栈 XOR CX, CX XOR DX, DX MOV CX, 0
CMP CX,1 ;ZF = 0 AGAIN: ;输入 MOV AH, 1 INT 21H SUB AL, 48 MOV AH, 0 PUSH AX INC
CX CMP CX,2 JNE AGAIN ;将栈中的数值整体变成一个数值 MOV DX, CX XOR BX, BX XOR CX, CX A: POP
AX MOV BX, CX XOR CX, CX CMP CX,0 B: CMP CX, BX JE DOWN ;CX == BX MUL [TEN] INC
CX JMP B DOWN: PUSH BX MOV BX, OFFSET SUM ADD[BX], AX POP BX INC CX CMP CX, DX
JE SHUT;CX == DX JMP A SHUT: CALL PRINTLN LEA SI, SUM ;将数值转变为数字字符并输出
NUMBER_OUTPUT SI CALL TERMINATE CODE ENDS END START

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信