我正在使用NASM 16 BITS.我正在尝试做一个简单的汇编代码,打印0到255之间的数字,每个数字之间间隔1秒.这是我到目前为止:
[bits 16]
mov ax,cs
mov ds,ax
mov cx,255
mov ax,0
myloop:
;print in screen ax value
;wait 1 second
inc ax
loop myloop
Run Code Online (Sandbox Code Playgroud)
我不确定如何在屏幕上打印ax的值,以及如何等待1秒(将它们放在代码中的注释中).
当执行 sleep(10) 或等效语句时 CPU 会做什么。当CPU也进行上下文切换时,它如何准确地等待60秒,使该进程进入等待状态。
无论CPU的时钟速度如何,我都希望暂停执行大约0.1秒.代码应该直接从引导设备运行,因此不应该使用DOS中断.
我正在使用int 15h,但这似乎与我用PIT的通道2进行调制的嘟嘟声相冲突.我听说过频道0,但我不清楚如何设置它.
准确性并不重要,但它应该以相同的速度在旧的和现代的计算机上运行.因此,循环指令不是一种选择.
哔声代码和睡眠只是一堆用于改变频率和打开和关闭扬声器的宏.如果我之前打电话给睡觉,嘟嘟似乎不会停止beepoff.
以下是蜂鸣声宏:
%macro beepinit 0
mov al, 182
out 43h, al
%endmacro
%macro beepfreq 0
out 42h, al
mov al, ah
out 42h, al
%endmacro
%macro beepon 0
in al, 61h
or al, 00000011b
out 61h, al
%endmacro
%macro beepoff 0
in al, 61h
and al, 11111100b
out 61h, al
%endmacro
Run Code Online (Sandbox Code Playgroud)
和睡眠一:
%macro sleep 2
push dx
mov ah, 86h
mov cx, %1
mov dx, %2
int 15h
pop dx
%endmacro
Run Code Online (Sandbox Code Playgroud)
我正在使用NASM汇编程序. …