C/C++ 中的简单“Hello World”内联汇编语言程序

Posted

技术标签:

【中文标题】C/C++ 中的简单“Hello World”内联汇编语言程序【英文标题】:a Simple "Hello World" Inline Assembly language Program in C/C++ 【发布时间】:2011-01-11 20:37:21 【问题描述】:

我使用 devcpp 和 borland 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

在上面的代码 sn-ps 中,我想在汇编语言的帮助下打印一个字符串... 但是我怎样才能将字符串的地址放入寄存器 cx....

代码有问题吗???

【问题讨论】:

0x21 - 非常感谢您了解基础知识 :-) 字符串是如何存储的?即:name 的声明是什么? 我建议忽略 16 位实模式汇编,直接从 32 位汇编开始。如今,它变得更加容易和实用。 好吧thanx....但是有什么方法可以获取字符串的地址并放回cx寄存器...或者您是否尝试过内联汇编...我只需要一点帮助...所以我可以从 asm 开始...任何例子??? 【参考方案1】:

只要把变量名放进去:

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

免责声明:我不太擅长组装。

【讨论】:

【参考方案2】:

我手头没有 Borland 编译器,所以我可能记错了它的语法,但是你试过这个吗:

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),但它仍会在运行时抛出错误。我再试一次...

【讨论】:

不,它不起作用......它给出错误......有没有其他方法可以让我得到字符串的地址......然后放回cx寄存器.... 据我所知,mov cx,msgmsg 的地址放入cx 寄存器。你得到了什么? @vs4vijay 您不应该接受无效的解决方案作为答案,因为它具有误导性。

以上是关于C/C++ 中的简单“Hello World”内联汇编语言程序的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp C ++ Hello World

Python介绍下载安装配置第一个程序Hello World

OpenCV Hello World

为啥以千字节为单位的 C/C++“Hello World”? [复制]

译QT5教程01 -- hello world!

混合编程JNI之第一篇 Hello world