- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在基于 Pentium 的计算机上运行 MS-DOS 6.22(主板支持 ACPI),并且想知道是否有一个可以用来关闭计算机的汇编语言例程,或者它是否比这更难一些(即主板特定)?
基本上,我想创建一个小程序来从命令行关闭计算机。
最佳答案
下面是专门为此编写的工具的示例: http://www.plop.at/en/dostoolsdl.html
源代码可以在这里找到: http://download.plop.at/files/SHUTDOWN.ASM
;*****************************;
; ;
; Code by BiTByte ;
; [Elmar Hanlhofer] ;
; ;
;-----------------------------;
; ;
; SHUTDOWN PC IN DOS ;
; ;
; - Sourcecode is FREE - ;
; ;
;-----------------------------;
; ;
; assembling: ;
; ;
; tasm shutdown ;
; tlink /t shutdown ;
; ;
;-----------------------------;
; ;
; http://plop.at ;
; ;
;*****************************;
assume cs:code,ds:code
assume es:nothing,ss:nothing
code segment
.286
org 100h
start:
push cs
pop ds
call ProcessCommandline
cmp parameter,WRONGPARAMETER
jne @main1
mov ah,9
lea dx,WrongTxt
int 21h
jmp @exit
@main1:
cmp parameter,NOOUTPUT
je @main2
mov ah,9
lea dx,TitleTxt
int 21h
@main2:
cmp parameter,0
je @main30
cmp parameter,HELP
jne @main3
@main30:
mov ah,9
lea dx,HelpTxt
int 21h
int 20h
@main3:
mov ah,2ch
int 21h
call Print
@again:
mov countw,dh
cmp ignore,1
je @again2
mov ah,1
int 16h
jne @exit
@again2:
mov ah,2ch
int 21h
cmp countw,dh
je @again
call Print
cmp seconds,0
je @chknxt1
dec seconds
jmp @again
@chknxt1:
cmp minutes,0
je @nl
mov seconds,59
dec minutes
jmp @again
@nl:
call Poweroff
@exit:
xor ax,ax
int 16h
mov ah,9
lea dx,aborttxt
int 21h
int 20h
Print:
cmp parameter,NOOUTPUT
jne @prn
ret
@prn:
pusha
mov ax,seconds
lea di,outpsec
mov byte ptr ds:[di-1]," "
call integer
mov ax,minutes
lea di,outpmin
mov byte ptr ds:[di-1]," "
call integer
lea dx,outputtxt
mov ah,9
int 21h
popa
ret
Integer:
pusha
mov bx,10 ; set base (10 values)
mov byte ptr ds:[di],"0" ; write "0"
@decagain:
or ax,ax ; check if ax=0
je @decexit
xor dx,dx ; clear dx for div
div bx
add dl,"0" ; in dx=rest & add value "0"
mov ds:[di],dl ; write it
dec di ; sub pointer 1
jmp @decagain
@decexit:
popa
ret
ProcessCommandline:
pusha
mov si,81h
@proces1:
call RemoveSpaces
cmp byte ptr ds:[si],0dh
je @procescmdexit
cmp word ptr ds:[si],"m-"
jne @proces2
add si,2
call RemoveSpaces
call convert
mov minutes,ax
jmp @proces1
@proces2:
cmp word ptr ds:[si],"s-"
jne @proces3
add si,2
call RemoveSpaces
call convert
mov seconds,ax
jmp @proces1
@proces3:
cmp word ptr ds:[si],"h-"
jne @proces4
add si,2
mov parameter,HELP
call RemoveSpaces
cmp byte ptr ds:[si],0dh
je @procescmdexit
mov parameter,TOOMANYPARAMETERS
jmp @procescmdexit
@proces4:
cmp word ptr ds:[si],"n-"
jne @proces5
add si,2
call RemoveSpaces
mov parameter,NOOUTPUT
jmp @proces1
@proces5:
cmp word ptr ds:[si],"i-"
jne @proces6
add si,2
call RemoveSpaces
mov ignore,1
jmp @proces1
@proces6:
mov parameter,WRONGPARAMETER
@procescmdexit:
popa
ret
Convert:
mov parameter,OK
mov di,si
push si
call ToStringEnd
sub si,di
mov cx,si
pop si
push cx
call rinteger
pop cx
add si,cx
ret
RemoveSpaces:
cmp byte ptr ds:[si],20h
jne @removeexit
inc si
jmp removespaces
@removeexit:
ret
ToStringEnd:
cmp byte ptr ds:[si],20h
je @tostrexit
cmp byte ptr ds:[si],0dh
je @tostrexit
inc si
jmp tostringend
@tostrexit:
ret
rinteger:
push bx dx si
xor ax,ax
xor dx,dx
mov bx,10 ; set base 10
@rdecagain:
mul bx ; x10
mov dx,ax ; save old eax
lodsb ; load next value
cmp al,"0" ; value valid?
jb @rdecexit
cmp al,"9"
ja @rdecexit
and ax,0ffh
sub al,"0" ; yes -> sub ascii value
add dx,ax ; add new to old
mov ax,dx ; save new value
loop @rdecagain ; loop during the string
@rdecexit:
pop si dx bx
ret
PowerOff:
mov ax,5300h
mov bx,0
int 15h
push ax
mov ax,5308h
mov bx,1
mov cx,1
int 15h
mov ax,5308h
mov bx,0ffffh
mov cx,1
int 15h
mov ax,5301h
mov bx,0
int 15h
mov ax,530Eh
mov bx,0
pop cx
int 15h
mov ax,530Dh
mov bx,1
mov cx,1
int 15h
mov ax,530Fh
mov bx,1
mov cx,1
int 15h
mov ax,5307h
mov bx,1
mov cx,3
int 15h
int 20h
OK = 1
NOOUTPUT = 2
HELP = 3
TOOMANYPARAMETERS = 5
WRONGPARAMETER = 6
TitleTxt db "PLOP Shutdown program v1.1 Coded by Elmar Hanlhofer "
db "http://plop.at",0dh,0ah,0ah,"$"
WrongTxt db "Error: wrong parameter use -h for help",0dh,0ah,"$"
Param1Txt db "-m"
Param2Txt db "-s"
Param3Txt db "-h"
Param4Txt db "-n"
HelpTxt db "shutdown [-s value] [-m value] [-n] [-i] [-h]",0dh,0ah,0ah
db " turns the pc off"
db 0dh,0ah,0ah
db " -s seconds",0dh,0ah
db " -m minutes",0dh,0ah
db " -n no output",0dh,0ah
db " -i ignore key press to abort",0dh,0ah
db " -h help",0dh,0ah,"$"
OutputTxt db 0dh,"Shutdown in Minutes: "
outpmin db " Seconds: "
outpsec db " $"
ignore db 0
aborttxt db 0dh,"Abort ",0dh,0ah,"$"
parameter db 0
minutes dw 0
seconds dw 0
count db ?
countw db ?
code ends
end start
关于assembly - 使用 ACPI 在 MS-DOS 中关闭计算机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2019463/
在MS-DOS中,如果输入dir *.pdf,我将在目录中获取所有PDF文件。除了PDF文件,有什么方法可以获取所有内容?像dir !*.pdf一样? 谢谢! 最佳答案 我认为findstr有一个/v
我们如何在 DOS 中实现递归目录列表? 我正在 DOS 中寻找一个命令或脚本,它可以为我提供类似于 Unix 中的 ls -R 命令的递归目录列表。 最佳答案 您可以使用: dir /s 如果您需要
当我使用 ren "C:\folder\file""C:\folder\file.txt" 出现错误“命令的语法不正确。” 但是如果我 CD 到文件夹并使用 ren "file""file.txt"
比如,我能不能做 回显 3 + 5 并得到 8? 是否可以使用日期进行计算? 最佳答案 您可以使用set/a 来计算数学表达式: set /a x=3+5 echo %x% 编辑:这是一行: @for
我正在寻找一个 DOS 脚本来删除根目录中的所有文件和子目录,但根目录中的一组批处理文件 (*.bat) 除外。任何 DOS 运动员都知道一种简单的方法来做到这一点? 更新 谢谢大家的帮助。这就是我现
如何在目录及其子目录中搜索文件并以简洁的格式显示文件名及其创建时间。 我尝试了dir sam.csv/b/s/a-d 但是不起作用。 输出应该如下所示 c:\Data\Sam.txt 10/10/20
我有一个在并发 DOS 3.1 上运行的软件,我使用 QEMU 5.1 对其进行模拟。 在此程序中,有多个打印数据的选项。问题是到达我的主机的数据与发送的数据不对应。 启动qemu的命令: qemu-
我有一个在并发 DOS 3.1 上运行的软件,我使用 QEMU 5.1 对其进行模拟。 在此程序中,有多个打印数据的选项。问题是到达我的主机的数据与发送的数据不对应。 启动qemu的命令: qemu-
在 C 中,我如何写入特定的内存位置,例如视频内存 b800,在 DOS 下(真正的 DOS,MS DOS 6.22) 我知道 C 没有内置任何东西可以做到这一点,但可能有一些特定于平台的东西,例如可
我有一个大约 15 年前购买的非常古老的应用程序,它由 5 个 .exe 文件组成,用于存储患者的个人资料和信息。问题是该应用程序被编程为在特定计算机上运行。 由于我对破解知之甚少,我尝试使用 win
这个问题已经有答案了: How to redirect stderr to null in cmd.exe (1 个回答) 已关闭 4 年前。 我想抑制在 DOS 下运行的脚本的输出,类似于 *nix
我想从 MATLAB 在 dos 中执行一个批处理文件,并立即将控制权返回给 MATLAB。但是,我想在不打开 dos 窗口的情况下执行此操作(或者,至少,让 dos 窗口在最后消失)。 如果我这样格
最初... 我在 10 年前(大学)开始用 C 编程。我使用的 IDE 是 Turbo C++ IDE。 我所有的 c 程序都是 16 位的。 内存模型:巨大。 图形:4 位(16 色)。 图形驱动:
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 11 年前关闭。 Improve this
我需要一个批处理文件中的脚本,当我运行它时,它会将我昨天的日期放入一个变量中。包括 3 月 1 日等条件(根据年份可能是 2 月 28 日或 29 日) 最佳答案 假设您的意思是 ms-dos 批处理
我有一个可以做几件事的批处理文件。如果其中一个失败,我想退出整个程序。例如: @echo off type foo.txt 2>> error.txt >> success.txt mkdir bob
我正在尝试编写一个批处理脚本,将多个 css 文件合并到一个文件中。到目前为止,我已经想出了这个...... # Set start folders & files set fn1=filename.
我有不同的文件夹,例如:a、b、c 等,每个文件夹都有不同的文件,例如:x、y、z 等。 文件 x,y,z 位于每个文件夹中。有没有办法使用单个命令从不同文件夹复制每个文件?我希望结果是所有文件夹中的
我需要获取命令行输出的第一行而不是所有行,例如,如果我给 C:\Temp> dir 我只需要显示第一行, 11/15/2012 06:58 PM
如何使用 dos 批处理文件命令将日期设置为当前日期。 最佳答案 如果您需要在批处理文件中使用当前日期,则变量 %date% 具有当前日期: echo %date% 23/02/2010 它使用您计算
我是一名优秀的程序员,十分优秀!