- [组图] 下载速度快一倍BitComet提速方案
- [组图] BitComet 0.68 下载使用技巧全攻略
- 提高BitComet下载速度之配置完全教程
- 如何在SSL内加密任意TCP连接
- 网警NetCop入侵检测系统
- TCP三次握手及原理
- TCP/IP攻击原理分析总结
- 网络基础知识讲座之九:初步理解TCP协议
- 网络基础知识讲座之十:TCP协议理解进阶
- 防止SYN攻击 开启路由器的TCP拦截
- 超级详细Tcpdump 的用法
- Wi-Fi之后下一个802.11n标准值得期待
- 无线局域网IEEE802.11标准的关键技术
- [图文] 欲速不达 看IEEE临时叫停802.20的背后
- Atheros推超值型高性能802.11n草案方案
- [图文] 保无线安全:IEEE 802.11i无线安全技术
- [图文] Wi-Fi新标准延期 现802.11n设备是废品吗
- [组图] Cisco1200 802.11g WLAN接入点的初步配置
- 802.16无线技术:下一代宽带无线接入新宠
- [组图] IEEE802.11无线局域网(WLAN)研究及发展报告(1..
可以看到汇编语言的基本格式为:
PUBLIC _FOUND
_TEXT SEGMENT BYTE PUBLIC CODE
ASSUME CS: _TEXT
_FOUND PROC NEAR
PUSH BP
MOV BP,SP
MOV CX,[BP+4]
DEC CX
MOV SI,[BP+10]
LODSW
MOV DX,1
MOV BX,0
COMP: CMP AX,[SI]
JA BIGGER
MOV AX,[SI]
MOV BX,DX
BIGGER: INC SI
INC SI
INC DX
LOOP COMP
MOV DI,[BP+6]
MOV [DI],AX
MOV DI,[BP+8]
MOV [DI],BX
POP BP
RET
_FOUND ENDP
_TEXT ENDS
END
为了看得更清楚,我们把代码去掉,留下基本框架:
PUBLIC _FOUND
_TEXT SEGMENT BYTE PUBLIC CODE
ASSUME CS: _TEXT
_FOUND PROC NEAR
PUSH BP
MOV BP,SP
......... ;从这里开始加入汇编代码
.........
POP BP
RET
_FOUND ENDP
_TEXT ENDS
END
这就是在samll(小模式)下的汇编语言接口框架,在加入代码处,写上你所要完成一定功能的汇编代码,就成为一个可供TC调用的汇编模块。
可以看出,代码段是以带下划线的标识符开头的。
代码段的标识为_TEXT,由C程序中调用的函数found在这里也是以下划线标出:_FOUND。
下面是代码段的组成:
_TEXT SEGMENT BYTE PUBLIC CODE
................
_TEXT ENDS
下面是函数的组成:
_FOUND PROC NEAR
.............
_FOUND ENDP
在small(小模式下,只要按照以上的格式书写汇编代码,就一定能成功地被C程序调用。
为什么是这样的格式而不是别的格式?要是不按照这个格式书写行不行?
这个格式是TC编译程序所定好了的,如果不按照这个格式书写汇编代码,调用就不会成功。
为了说明这个问题,我们可用一个简单的例子来做一个试验:
void found(int i,int *j,int *k,int *s)
{
}
在这个C函数中,什么代码也没有,只是一个空的框架,我们就用这个框架程序让TC生成一个该程序的汇编代码,看一看TC生成的汇编代码是一个什么样子。
在命令行下进行如下操作:
输入: tcc -S found 回车 /*要注意参数s一定要写成大写,不然会提示错误*/
这时在生成的文件中,有一个found.asm 的汇编代码文件,我们把它打开看一下:(语句后的注释是自己加上的)
ifndef ??version
?debug macro
endm
endif
?debug S found.c
_TEXT segment byte public CODE
DGROUP group _DATA,_BSS
assume cs:_TEXT,ds:DGROUP,ss:DGROUP
_TEXT ends
_DATA segment word public DATA
d@ label byte
d@w label word
_DATA ends
_BSS segment word public BSS
b@ label byte
b@w label word
?debug C E9943D8F2E07666F756E642E63
_BSS ends
_TEXT segment byte public CODE ; _TEXT 标识符的段码段
?debug C E80007666F756E642E63943D8F2E
?debug L 1
_found proc near ; 函数found 用下划线标识, _found从这里开始
?debug B
push bp
mov bp,sp
?debug C E318000200150404
?debug C E60173180A0A00016B180A0800016A180A060001+
?debug C 69040A0400
?debug B
@1: ;从这里开始加入我们自己的汇编代码
?debug L 3
pop bp
ret
?debug C E60173180A0A00016B180A0800016A180A060001+
?debug C 69040A0400
?debug E
?debug E
_found endp ; 函数_found结束
_TEXT ends ; 代码段结束
?debug C E9
_DATA segment word public DATA
s@ label byte
_DATA ends
_TEXT segment byte public CODE
_TEXT ends
public _found
?debug C EA0109
?debug C E31900000023010000
?debug C EC065F666F756E641918
end
不需要对上面的这个汇编代码作任何改动,你要做的只是在@1:标识符开始处填上需要完成一定功能的汇编代码,那么一个可以由TC正确调用的汇编函数接口就完成了。
一般的做法是去掉上面汇编代码中多余的信息(这些信息是TC自动生成),成为看上去很清析的汇编代码,如前所述
:
PUBLIC _FOUND
_TEXT SEGMENT BYTE PUBLIC CODE
ASSUME CS: _TEXT
_FOUND PROC NEAR
PUSH BP
MOV BP,SP
......... ;从这里开始加入汇编代码
.........
POP BP
RET
_FOUND ENDP
_TEXT ENDS
END
待续。。。。。
[编辑:百家电脑学院] [返回学院首页] [返回上一页] []
·上一篇:几个图形(01) · 下一篇:TC2.0中怎样调用汇编程序(01)

