2015-08-27 51 views
3

聯彙編我想下面的代碼從內聯彙編打印C的char *使用INT 10H

extern "C" void KernelMain() 
{ 
    char *mytxt = "Ahmed"; 
    _asm 
    { 
      mov  si,mytxt 

     Print: 
      lodsb       ; load next character 
      or  al, al     ; test for NUL character 
      jz  DONE 
      mov  ah, 00Eh    ; BIOS teletype 
      mov  bh, 000h    ; display page 0 
      mov  bl, 007h    ; text attribute 
      int  010h     ; invoke BIOS 
      jmp  Print 
     DONE : 
    } 

打印Çchar*,但在調試時我總是覺得si指錯了偏移。 我試過mov si,offset mytxt,但也失敗了。

我使用MSCV ++

+0

你應該指定你正在使用的C編譯器。 – Michael

+1

你正在使用哪種編譯器?您可以嘗試使用'lea'指令代替mov:'lea si,mytxt' – ex0ns

+0

我正在使用msvC++ –

回答

4
char *mytxt = "Ahmed"; 

這是一個指向文本,mytext不包含文本本身,文字的只是地址。

 mov  si,mytxt 

這將加載的mytext地址放入si,其指針的存儲位置,而不是指針本身。

可以通過使用

 mov  si,[mytxt] 

其中[]表示間接加載的mytext的內容,這是字符串的地址。加載存儲在mytext處的值。