键盘输入并回显

把01传给AH,则可以实现键盘输入并回显,如果输入成功则AL为输入的字符

image-20240727210331982

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
MyStack segment stack      ;stack表明是堆栈段,则之后系统给地址会从大到小,而且系统会自动把该段的基址送入ss寄存器
db 256 dup(?)
MyStack ends

MyData segment ;数据段
db 03,04,05,06
string db "Hello World$"
MyData ends

MyCode segment ;代码段
start: ;告诉编译器代码从此处开始
mov ax,MyData ;获取段基址
mov ds,ax ;将段基址送入寄存器
mov es,ax

;键盘输入并回显
mov ah,01
int 21h

mov dx,offset string ;==>mov dx,word ptr[0]==>mov dx,0 获取hello world在代码段的偏移
mov ah,09h ;系统调用printf函数
int 21h

mov ax,4c00h
int 21h ;退出程序
MyCode ends

end start

数入a后al为a的ASCII码61,说明输入成功

image-20240727210714678

操作文件

image-20240727220517709

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
MyStack segment stack      ;stack表明是堆栈段,则之后系统给地址会从大到小,而且系统会自动把该段的基址送入ss寄存器
db 256 dup(?)
MyStack ends

MyData segment ;数据段
db 03,04,05,06
string db "Hello World$"
path db "C:\1.txt",0
MyData ends

MyCode segment ;代码段
start: ;告诉编译器代码从此处开始
mov ax,MyData ;获取段基址
mov ds,ax ;将段基址送入寄存器
mov es,ax

;打开文件
mov dx,offset path
mov al,3
mov ah,3dh
int 21h

;读文件
mov bx,ax
mov dx,offset path
mov cx,10
mov ah,3fh
int 21h

;关闭文件
mov bx,bx
mov ah,3eh
int 21h

;键盘输入并回显
mov ah,01
int 21h

mov dx,offset string ;==>mov dx,word ptr[0]==>mov dx,0 获取hello world在代码段的偏移
mov ah,09h ;系统调用printf函数
int 21h

mov ax,4c00h
int 21h ;退出程序
MyCode ends

end start

输入10个字节后,AX显示读入了10个字节

image-20240727220625828