我試圖轉移我的一些16位的實模式OS項目採用Turbo C編譯器的工作3.1問題有標籤的Turbo C和內嵌x86彙編
嘗試中使用標籤時,我有以下問題我的內聯彙編:
void mos_io_print_string_c(char* str, char color) {
asm {
MOV SI, [str] // point SI to str
MOV BL, [color] // point BL to color
MOV AH, 03h // get current location of cursor
INT 10h // call BIOS
_do:
LODSB // load the next char from our string
CMP AL, 0 // at the end of our string?
JE _done // if so, leave
MOV AH, 02h // set cursor pos: whatever is set
INT 10h // call BIOS
INC DL // increase cursor horiz pos
MOV AH, 09h // output char with attributes
MOV BH, 0 // set page to write to
MOV CX, 1 // number of times to print character
INT 10h // call BIOS
JMP _do // loop
_done:
MOV AH, 0Eh // setup AH for BIOS output char
MOV AL, 0Dh // carriage return
INT 10h // output carriage return
MOV AL, 0Ah // new line
INT 10h // output new line
}}
我正在從Turbo C的以下輸出與3.1:
Compiling PS.C:
.Error PS.C 39: Undefined label '_do'
Error PS.C 39: Undefined label '_done'
我曾嘗試一切,包括增加@@
符號標籤。我甚至試圖用CS:_do
和CS:_done
來引用它們。我也嘗試在標籤上使用NEAR
運算符。我知道Turbo C是舊的,但我在選擇16位C編譯器時受到限制。如果任何人有任何建議,將是偉大的。
謝謝!
你的意思是什麼,通過定期的「C標籤」? – JohnnyStarr
你跳轉到goto的那種。語法是相同的,但是你需要用中間的標籤來分隔他們周圍的asm {}塊。例如。 void foo(){my_loop:asm {jmp my_loop}} – doynax