mov ah,0ah int 21h
时间: 2023-12-05 07:13:22 浏览: 100
这是一个 DOS 中断调用,用于从键盘缓冲区中读入一个字符串。具体来说,它会将输入的字符串存储在一个由 DS:DX 指定的内存位置中,其中 DS 和 DX 是寄存器,用于存储字符串的地址。输入的字符串以回车键结束,回车键不会被包含在字符串中。在执行这个中断调用之前,需要将 DS 和 DX 寄存器设置为要存储字符串的内存地址。执行完这个中断调用后,AX 寄存器中会存储读入的字符串的长度(不包括回车键)。
相关问题
mov ah,07h int 21h mov ah,4ch int 21h、
这是一段汇编代码,它的功能是使用DOS系统调用显示一个警告框,并且退出程序。具体来说:
- mov ah,07h: 将7h存入ah寄存器,表示要调用DOS系统的“显示字符和属性”功能。
- int 21h: 触发DOS系统调用,执行显示字符和属性的操作。
- mov ah,4ch: 将4ch存入ah寄存器,表示要调用DOS系统的“程序结束”功能。
- int 21h: 触发DOS系统调用,执行程序结束的操作。
因此,这段代码的作用是先显示一个警告框,然后退出程序。
DATA SEGMENT IO8253_K EQU 040H ; 8253控制字端口地址 IO8253_0 EQU 042H ; 8253通道0计数器端口地址 IO8253_1 EQU 046H ; 8253通道1计数器端口地址 IO8253_2 EQU 04AH ; 8253通道2计数器端口地址 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX, DATA MOV DS, AX ; 通道0计数器初始值为1000 MOV AX, 1000 MOV DX, IO8253_0 OUT DX, AL MOV AL, AH OUT DX, AL ; 通道1计数器初始值为2000 MOV AX, 2000 MOV DX, IO8253_1 OUT DX, AL MOV AL, AH OUT DX, AL ; 通道2计数器初始值为3000 MOV AX, 3000 MOV DX, IO8253_2 OUT DX, AL MOV AL, AH OUT DX, AL ; 设置8253控制字,选择二进制计数、工作方式3、初始值计数器、通道0、无自动加载 MOV DX, IO8253_K MOV AL, 00110110B OUT DX, AL ; 循环读取计数器值并输出 LOOP: ; 读取通道0计数器值 MOV DX, IO8253_0 IN AL, DX MOV AH, 0 ; 输出计数器值 MOV CX, 1000 DIV CX MOV DL, AH ADD DL, 30H MOV AH, 02H INT 21H MOV DL, AL ADD DL, 30H MOV AH, 02H INT 21H MOV AH, 02H MOV DL, ',' INT 21H ; 读取通道1计数器值 MOV DX, IO8253_1 IN AL, DX MOV AH, 0 ; 输出计数器值 MOV CX, 1000 DIV CX MOV DL, AH ADD DL, 30H MOV AH, 02H INT 21H MOV DL, AL ADD DL, 30H MOV AH, 02H INT 21H MOV AH, 02H MOV DL, ',' INT 21H ; 读取通道2计数器值 MOV DX, IO8253_2 IN AL, DX MOV AH, 0 ; 输出计数器值 MOV CX, 1000 DIV CX MOV DL, AH ADD DL, 30H MOV AH, 02H INT 21H MOV DL, AL ADD DL, 30H MOV AH, 02H INT 21H MOV AH, 02H MOV DL, 0DH INT 21H MOV DL, 0AH INT 21H JMP LOOP CODE ENDS END START
这段代码的功能是使用8253芯片产生三个不同频率的方波,并将这三个方波的频率输出到屏幕上。
具体实现的过程是,先设置8253芯片的三个通道的初始值,然后设置8253芯片的控制字,选择二进制计数、工作方式3、初始值计数器、通道0、无自动加载。
接着进入一个循环,循环中先读取8253芯片的通道0、通道1和通道2的计数器值,然后将这些计数器值除以1000并输出到屏幕上,最后换行并返回循环开始处继续执行。
需要注意的是,这段代码使用了汇编语言编写,需要在汇编器中编译、链接后才能在计算机上运行。
阅读全文