隨著計算機技術(shù)的發(fā)展,程序運行速度已不再是重要問題了,很多情況下數(shù)控系統(tǒng)軟件可以使用高級語言編寫。由于低級語言對于控制硬件的功能強,使用低級語言編制控制程序簡單方便。所以在系統(tǒng)程序設(shè)計中在復(fù)雜計算和界面設(shè)計中使用高級語言(如C語言),在控制程序中使用低級語言(如匯編語言)就更方便。
為了使程序運行直觀,本例中動態(tài)顯示運動軌跡,同時用軟件分頻的方法發(fā)出步進電機控制信號。步進電機控制信號用PC機的并行口發(fā)出。本例控制兩個三相步進電機,其中x方向電機使用并行口中低4位中的D2、D1、D0位,Y方向電機使用并行口中高4位中的D6、D5、D4位,運行本程序時如果接上步進電機則可實現(xiàn)第一象限直線插補。
1 編制調(diào)用匯編語言的C語言程序
這里的c語言程序調(diào)用匯編語言第一象限的直線插補程序。本例的C語言程序文件名為zx-dasm.c,被調(diào)用的匯編語言程序為zxasm.asm。
用C語言主菜單中的comp丑e命令將zxdasm.cpp文件編譯成目標文件。本例用Borlandc 3.1(或Turboc等)版生成。生成目標程序的文件名為zx.dasm.obj。
2 生成被調(diào)用的匯編語言目標文件
2.1 制作一個被調(diào)用的匯編語言框架
(1)制作一個C語言空函數(shù)
在C語言環(huán)境中建立一個空函數(shù),空函數(shù)內(nèi)容為:
zxcb(){}
本例的文件名為zxasm.cpp。
(2)將空函數(shù)文件轉(zhuǎn)換成匯編語言文件在windows命令提示符狀態(tài)下,用命令bcc—SZXaSm 回車,該命令生成一個zxz路m.嬲m匯編語言框架文件。該命令在Borhndc(或Turboc中的tcc命令等)的bin文件夾下。
2.2 在框架文件中加入?yún)R編語言內(nèi)容
打開zxasm.asm匯編語言程序框架文件,在框架中加入?yún)R編語言程序內(nèi)容。本例的匯編語言為第一象限直線插補程序。
2.3 參數(shù)傳送說明
c語言程序在調(diào)用匯編語言程序時以函數(shù)的形式調(diào)用。本例中在主函數(shù)的前面定義了一個名字為zxcb的函數(shù),該函數(shù)中有8個參數(shù),8個參數(shù)的用途見程序中的注解。
在匯編語言程序中,框架中保護了bp,并且用pb指向堆棧,在匯編程序中如果使用了8i和di還要保護8i和di。如果匯編語言返回給C語言程序數(shù)據(jù)時,一般數(shù)據(jù)用ax。
當(dāng)C語言用有參函數(shù)調(diào)用匯編語言程序時,參數(shù)將會自動地壓入堆棧,由于在匯編語言中有pushbp、push 8i、push di語句,同時堆棧中還有返回c程序的地址。所以在本例中的8個參數(shù)的地址在bp+8以后。第1個參數(shù)的地址是bp+8,每個參數(shù)占兩個字節(jié)。
2.4 將匯編語言程序匯編成目標文件
在windows命令提示符狀態(tài)下用命令t鯽:n/mlzxasm.asm回車將zxasm.asm文件匯編成目標文件zxasm.obi。命令中的/ml選項使外部名字小寫。該命令在Borlandc(或Turboc等)的bin文件夾下。該步驟也可用宏匯編MASM完成。
3 連接成可執(zhí)行文件
將目標文件zxdasm.obj和zxasm.obi文件連接成可執(zhí)行文件,就可以在windows命令提示符下運行了。
用命令tlink C08 zxdasm zxasm,zxsy,,Csgraphic8回車將目標文件連接成可執(zhí)行文件,該文件可在命令提示符狀態(tài)下運行。該命令在Borhndc(或Turboc等)中的bin文件夾中。命令中的zxdasm和zxasm是要連接的目標文件C0s使用C0s.obi,它包含啟動程序和DOs所規(guī)定的頭部信息。cs是使用c8.nC的標準小模式庫。graphics是使用graphics.1ib圖形庫。zxsy為連接后的可執(zhí)行文件名。
4 結(jié)語
用這種方法可以在C程序中調(diào)用多個匯編語言程序,可以方便地實現(xiàn)對硬件進行各種控制。同時程序運行的速度可以大大加快,程序長度也可相應(yīng)的縮短。
(審核編輯: 智匯張瑜)
分享