亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 23443 | 回復(fù): 14
打印 上一主題 下一主題

[貌似已解決]gcc編譯匯編和c的函數(shù)調(diào)用的問題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2009-02-17 13:23 |只看該作者 |倒序瀏覽
感謝大家熱情的回復(fù),我后來自己好好想了想,然后翻了翻資料,和同學(xué)討論了下,貌似找到了問題的根源。
main.o的.text被ld貼到了512字節(jié)后面,但bios只會將第一個扇區(qū)讀入內(nèi)存,所以后面的壓根就沒有讀入,自然一call就掛了。
不知道,我這樣理解有沒有錯。

本來是想在寫bootsector的時候就用C,看來還是不能偷懶阿,只有在loader再開始了。

我寫了一個引導(dǎo)扇區(qū)的程序,想在其中調(diào)用用c寫的函數(shù),但是發(fā)現(xiàn),一旦在匯編中調(diào)用了C的函數(shù)之后,系統(tǒng)就卡在那里不往下執(zhí)行了,請問這怎么解決阿。
我是新手,還望大家多多幫忙阿。
boot.S:
#define MSG(x) leaw x,%si;call display

.code16
.section .text
.globl _start
_start:
    movw $0x2000,%sp
    movw %sp,%bp


    #set video mode
    movw $0x0003,%ax
    int $0x10
    
    MSG(sector_msg1)
    call main
    MSG(sector_msg2)
    
    
    _endless_loop:jmp _endless_loop

sector_msg1:
    .asciz "bootsector: looking for a loader... "
sector_msg2:
    .asciz "found\n\r"

.globl test
test:
    MSG(sector_msg2)
    ret

display:
    cld
    movb $0xe,%ah    /* use BIOS interrupt 10,e */
    movb $0xf,%bl    /* font color */
    display_start:
    lodsb
    orb %al,%al
    jz display_end
    int $0x10
    jmp display_start
    display_end:
    ret


.org 510
.word 0xaa55


main.c
extern void test();
void main()
{
    test();
    return;
}

鏈接腳本boot.ld:
OUTPUT_FORMAT("binary")
ENTRY(_start)
SECTIONS
{
    .text 0x7c00:
    {
        *(.text)
    }
}

Makefile:
CC=gcc
LD=ld
AS=as
LDSCRIPT=carrot.ld
DEBUG_DIR=./
INCLUDE_DIR=../include/

all:boot.img

boot.img:boot.bin
    dd if=/dev/zero of=$(DEBUG_DIR)emptydisk.img bs=512 count=2880
    dd if=boot.bin of=$(DEBUG_DIR)boot.img bs=512 count=1
    dd if=$(DEBUG_DIR)emptydisk.img of=$(DEBUG_DIR)boot.img skip=1 seek=1 bs=512 count=2879
boot.bin:boot.o
    $(LD) -Tboot.ld boot.o main.o -o boot.bin
boot.o:boot.S
    $(CC) -c -I$(INCLUDE_DIR) -o boot.o boot.S
    $(CC) -c -I$(INCLUDE_DIR) -o main.o main.c

clean:
    rm -rf *.bin *.o $(INCLUDE_DIR)/boot.img


[ 本帖最后由 破碎細(xì)胞 于 2009-2-19 17:18 編輯 ]

論壇徽章:
2
2015亞冠之萊赫維亞
日期:2015-09-14 11:19:42操作系統(tǒng)版塊每日發(fā)帖之星
日期:2015-11-05 06:20:00
2 [報告]
發(fā)表于 2009-02-17 14:01 |只看該作者
好想沒看到指定SP 是不這問題

論壇徽章:
0
3 [報告]
發(fā)表于 2009-02-17 17:50 |只看該作者
原帖由 lixinwei1985@si 于 2009-2-17 14:01 發(fā)表
好想沒看到指定SP 是不這問題

加上了這個
movw $0x2000,%sp
movw %sp,%bp
還是這個樣子

論壇徽章:
0
4 [報告]
發(fā)表于 2009-02-17 18:31 |只看該作者
這可能是常識的問題,是你沒有注意,一個程序應(yīng)該只有一個main函數(shù)!你這里C函數(shù)是用main!

論壇徽章:
0
5 [報告]
發(fā)表于 2009-02-17 18:43 |只看該作者
原帖由 破碎細(xì)胞 于 2009-2-17 13:23 發(fā)表
我寫了一個引導(dǎo)扇區(qū)的程序,想在其中調(diào)用用c寫的函數(shù),但是發(fā)現(xiàn),一旦在匯編中調(diào)用了C的函數(shù)之后,系統(tǒng)就卡在那里不往下執(zhí)行了,請問這怎么解決阿。
我是新手,還望大家多多幫忙阿。
boot.S:
#define MSG(x) ...

沒看你的代碼,因為你的概念就是錯的。
當(dāng)你執(zhí)行“引導(dǎo)扇區(qū)的程序”時,內(nèi)存里就只有ROM-BIOS和這個引導(dǎo)記錄代碼,C庫函數(shù)代碼還沒有進來,你沒法調(diào)用。

論壇徽章:
0
6 [報告]
發(fā)表于 2009-02-17 18:45 |只看該作者

回復(fù) #4 cwqing1973 的帖子

貌似不是這個問題,改成cmain結(jié)果是一樣的。

論壇徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-08-03 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-08-04 06:20:00
7 [報告]
發(fā)表于 2009-02-19 10:02 |只看該作者
你用你的MSG宏插到main函數(shù)里去跟蹤看看

論壇徽章:
0
8 [報告]
發(fā)表于 2009-02-19 16:51 |只看該作者
原帖由 beepbug 于 2009-2-17 18:43 發(fā)表

沒看你的代碼,因為你的概念就是錯的。
當(dāng)你執(zhí)行“引導(dǎo)扇區(qū)的程序”時,內(nèi)存里就只有ROM-BIOS和這個引導(dǎo)記錄代碼,C庫函數(shù)代碼還沒有進來,你沒法調(diào)用。

并沒有調(diào)用C的庫函數(shù)。
我的目的僅僅是想用C來寫一部分代碼,這樣輕松一點。
還是看了代碼再說比較好一點。

論壇徽章:
0
9 [報告]
發(fā)表于 2009-02-19 17:11 |只看該作者
原帖由 cjaizss 于 2009-2-19 10:02 發(fā)表
你用你的MSG宏插到main函數(shù)里去跟蹤看看

我貌似大概知道什么問題了。
C的.text被貼到了512字節(jié)后面,而bios開始只讀取引導(dǎo)扇區(qū),也就是512個字節(jié),后面的壓根就讀如內(nèi)存,所以一call就掛了。不知道這樣解釋有沒有道理。
其實,我的初衷是想在bootsector開始就用c來寫部分代碼,現(xiàn)在看來只有在loader開始了。

論壇徽章:
0
10 [報告]
發(fā)表于 2009-02-19 17:16 |只看該作者
Mark 一下,哈哈。不能偷懶哦。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP