2010-02-01 2 views
7

я использую devcpp и Borland C компилятор ....Простая программа языка «Hello World» Инлайн Ассамблея в C/C++

asm { 
    mov ax,4  // (I/O Func.) 
    mov bx,1  // (Output func) 
    mov cx,&name // (address of the string) 
    mov dx,6  // (length of the string) 
    int 0x21  // system call 
} 

в приведенных выше фрагментах кода я хочу, чтобы напечатать строку с помощью язык ассемблера ... но как я могу поместить адрес строки в регистр cx ....

что-то не так в коде ???

+0

0x21 - wow kudos для получения основ :-) –

+0

Как хранится строка? i.e: Что такое объявление 'name'? – GManNickG

+4

Я предлагаю проигнорировать 16-битный ассемблер реального режима и начать с 32-разрядного ассемблера. В наши дни это намного проще и практичнее. –

ответ

4

У меня нет компилятора Borland под рукой, так что я мог бы быть misremembering его синтаксис, но вы пробовали это:

asm { 
    mov ax,4  // (I/O Func.) 
    mov bx,1  // (Output func) 
    lds cx,"Hello, world" // (address of the string) 
    mov dx,6  // (length of the string) 
    int 0x21  // system call 
} 

или это:

char msg[] = "Hello, world"; 

asm { 
    mov ax,4  // (I/O Func.) 
    mov bx,1  // (Output func) 
    lds cx, msg // (address of the string) 
    mov dx,6  // (length of the string) 
    int 0x21  // system call 
} 

редактировать:, хотя это будет скомпилировано (теперь, когда я изменил MOV на LDS), он все равно будет вызывать ошибку во время выполнения. Я попробую еще раз ...

+1

нет, он не работает ... он дает ошибку ........ есть ли какой-либо другой способ, с помощью которого я могу получить адрес строки .. и поместить затем обратно в регистр cx .... – vs4vijay

+0

Насколько мне известно, 'mov cx, msg' поместить адрес' msg' в регистр 'cx'. Что вы получаете? – Jack

+0

@ vs4vijay Вы не должны принимать неработающее решение в качестве ответа, потому что оно имеет пропуски. – ST3

2

Просто поместите имя переменной там:

mov ax,4  // (I/O Func.) 
mov bx,1  // (Output func) 
mov cx,name // (address of the string) 
mov dx,6  // (lenght of the string) 
int 0x21  // system call 

Отказ от ответственности: Я не слишком хорошо при сборке.