显示标签为“MASM”的博文。显示所有博文
显示标签为“MASM”的博文。显示所有博文

20090416

UltraEdit实现代码折叠的wordfile语法

/Open Fold Strings = "if" "while"
O,U0L8P t3i-b;u` /Close Fold Strings = "endif" "endw"vAg-w;l ? A8W

20090310

tcc混合编译C和汇编不能使用结构体

tcc编译的时候不认识结构体,所以回报很多错误。

把结构体展开为变量就好了。

20090309

MASM inc指令后面直接放变量

inc 自加,后面不仅仅直接可以直接放寄存器,也可以直接放在数据段定义好的变量,如
data segment
b1nggou
data ends
.
.
.
inc b1nggou
--------------------------------------
best regards,
Devin_Chen

20090308

MASM汇编语言如何多行注释

【格式】
COMMENT delimiter [[text]]
[[text]]
[[text]] delimiter [[text]]


【注意】
比如注释如下,则会在第一个"a"("szMessage1"中的"a")地方停止多行注释。
COMMENT a
szMessage1 db "Hello World 1",0
szMessage2 db "Hello World 2",0
szCaption db "I ran out of imagination...",0
a


所以一般都在delimiter后面加上特殊符号(!,~ 等),比如:
comment start!
szMessage1 db "Hello World 1",0
szMessage2 db "Hello World 2",0
szCaption db "I ran out of imagination...",0
end comment start!

但是如果程序里面(通常是注释)可能也有“!”,所以这个时候就会出错。

Reference:

20090219

汇编中各种进制及其字符表示

汇编中各种进制及其字符表示

----------------------------------------
进制 字符 例子
----------------------------------------
二进制 B/Y(*) 1010B、1011B
八进制 Q/O 1234Q、311Q
十进制 D/T 1234D、512D
十六进制 H 1234H、1011H
----------------------------------------


备注
(*):字符Y、O和T是宏汇编MASM系统所增加的进制表示符。

20090206

在https://opensvn.csie.org/上面建立lsACPI项目

在https://opensvn.csie.org/上面建立lsACPI项目

C和汇编混合编写一个小工具,能够ls ACPI的Tables。

20090202

zero?

zero后面带个问号。

.IF ZERO? && AX != BX    ;检测ZF==1且AX!=BX是否成立


Ref:
http://blog.ixpub.net/html/13/13151113-235167.html

20090123

Error: Unable to execute command 'tasm.exe'

用TC3混合编译C和ASM,刚搭建的环境,首次编译报错:
D:\MASM\WORKS>tcc.exe -ID:\TURBOC3\INCLUDE -LD:\TURBOC3\LIB -B ACPI.C ACPIi.ASM

Turbo C++ Version 3.00 Copyright (c) 1992 Borland International
acpi.c:
Error: Unable to execute command 'tasm.exe'

tc和masm的bin目录的环境变量都设好了啊
tc下面也有tasm.exe,而且cmd下可以直接运行tasm。
后来把tasm.exe删除掉,发现错误没有变化,才想到会不会是tc到masm目录下找的tasm.exe啊(而不是自己目录下),于是把tc下的tasm.exe移动到了masm下,一编译,果然成功了。

在网上查了好久,发现大家问题都出在tc下面没有tasm.exe上,没想到我这里的问题这么特殊。

20081217

汇编语言MASM伪指令 - %out (百分号加out)

当看别人写的汇编语言中出现这样的指令时:
%out ACPI Tables in ...

真有点想杀人的感觉。
不过今天得一高人指点,终于明白了它的用处。

这个是MASM众多恶心伪指令中比较特别的一种指令,格式:
[%OUT]
格式:%OUT text
作用:在汇编期间,遇到%OUT时,在屏幕上显示出text项。

类似的还有%ECHO。参考这里
http://hi.baidu.com/58472/blog/item/bc7626cee033a50693457e3a.html

最后衷心感谢我的好战友,伟大的马克思主义者,伟大的无产阶级革命家、政治家、军事家、外交家。。。Nyx同志,祝他早日出双入对:-)

20081209

out时候端口号需不需要保存在dx中

一个例子
mov ax, 0aah
mov dx, 80h
out dx, ax

第二个例子:
mov ax, 0aah
out 80h, ax

编译都能够通过,可是到底在什么情况下才需要使用dx来存储端口号呢?

仔细看过汇编语言课本的都会发现,在使用out的时候,如果大于0ffh的端口号都需要使用dx来存储端口号,然后out dx。
如果小于等于ffh的话,则可以像第二个例子中那样直接out 80h了。

第三个例子:
mov ax, 0aah
mov dx, 0cf8h
out dx, ax

在这个例子中需要操作PCI,端口号大于0ffh,所以得先放到dx中再out。

20081022

在DOS下用汇编指令重启

这个基本上算是没用的东西(ctrl+alt+del就可以重启了),完全是为了好玩才使用的,可以做成一个reboot.exe文件。
mov     dx, 0cf9
mov al, 02h
out dx, al
mov al, 0eh
out dx, al