题目来源:《微机原理与接口技术》第五版,周荷琴,中国科学技术大学出版社 第四章课后第10、11、12、13、17题
编程环境:DOSBOX 0.74 / masm611
博客编辑:Markdown (首次尝试) (~ ̄▽ ̄)~
10.编写汇编语言程序,完成如下功能:
(1) 从键盘输入一个字符串“Please input a number: ”,存入BUFF开始的内存单元。
(2) 把内容中从BUFF单元开始存放的字符串显示在屏幕上。
使用MOV对缓冲区偏移量配合INT 21的系统功能调用即可将字符串存入内存;
显示字符串时有两种方案:一种是在输入字符串时在最后加“$”符号,在打印时会将它作为结束标志,相当于C语言字符串操作中‘\0’的作用;另一种方案是在存字符串入内存时同时把输入的字符的数量存进去,显示的时候把这个数字作为循环次数一个一个把字符显示出来。
;第一种方案
MYSTACK SEGMENT STACK
DW 64 DUP(?)
MYSTACK ENDS
DATA SEGMENT
BUFF DB 50
DB ?
DB 50 DUP(?)
DATA ENDS
ASSUME CS:CODE,SS:MYSTACK,CS:DATA
CODE SEGMENT
START: MOV AX, DATA
MOV DS, AX
MOV DX, OFFSET BUFF ;向缓冲区写字符串
MOV AH, 0AH
INT 21H
MOV SI, OFFSET BUFF ;读出缓冲区偏移地址
INC SI
MOV AH, 00H
MOV AL, [SI] ;输入字符数存入AL
INC AL
INC AL
MOV SI, AX
MOV DS:[SI], '$' ;在字符串末存入'$'
MOV DX, OFFSET BUFF
INC DX
INC DX
MOV AH,9
INT 21H
INT 3