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