我正在尝试使用NASM程序集中的Windows API,只是对函数和诸如此类的一些基本调用。所以,我去了MSDN网站,了解了Beep功能。它说它需要两个值,包括双字,频率和持续时间。所以这就是我的装配程序的样子:
NULL equ 0 ; null
global _start ; entry point
extern Beep, ExitProcess ; the stuff I need
section .data
beepfreq dd 37 ; limit of 37 to 32,767
beepdur dd 300 ; This is in milliseconds
section .bss
dummy resd 1 ; nothing
section .text
_start:
push beepfreq ; beep frequency
push beepdur ; beep duration
call Beep ; call it
push NULL
call ExitProcess
然而,当我运行程序时,蜂鸣声总是听起来一样,并且持续时间超过300毫秒。无论我改变频率或持续时间,它总是听起来都一样。为什么呢?
答案 0 :(得分:2)
此:
push beepfreq ; beep frequency
push beepdur ; beep duration
call Beep ; call it
应该是:
push dword [beepdur]
push dword [beepfreq]
call Beep ; call it
首先;参数从右向左推(即函数的第一个参数应该最后推)。
其次;在NASM语法中push beepfreq
表示“push
地址beepfreq
”(如MASM / TASM语法中的push OFFSET beepfreq
)。要获取该地址的值,请使用括号。