青玄 发表于 2013-12-21 19:08:57

怎样在C程序里面加上汇编代码进行编写-请大神指点指点

高手们,我想在一个C程序的前面加上一段验证密码的汇编代码可不可以啊!
下面就是汇编代码与C程序的代码,就是想知道是怎么加到C程序里面的:
DATAREA SEGMENT
CODE       DB         'ABCDEF'
BUFFER      DB      7, 0, 7 DUP(?)
MESS1      DB       'INPUT CODE:$'
MESS2      DB       0DH, 0AH, '$'
MESS3       DB      'OK!$'
MESS4       DB       'ERROR!PLESE REINPUT:$'
DATAREA ENDS
PROGRAM SEGMENT
MAIN PROC FAR
      ASSUME DS:DATAREA, ES:DATAREA, CS:PROGRAM
START:
         MOV AX, DATAREA
         MOV DS, AX
         MOV ES, AX
         LEA DX, MESS1
REINPUT:MOV AH, 09H
         INT 21H
         MOV DX, OFFSET BUFFER
         MOV AH, 0AH
         INT 21H
         LEA DX, MESS2
         MOV AH, 09H
         INT 21H
         MOV SI, OFFSET CODE
         MOV DI, OFFSET BUFFER + 2
         MOV CX, 6
         CLD
         REPE CMPSB
         JNE UNEQU
         MOV DX, OFFSET MESS3
         MOV AH, 09H
         INT 21H
         MOV AH, 04CH
         INT 21H
UNEQU:    MOV DX, OFFSET MESS4
          JMP REINPUT

   MAIN ENDP
PROGRAM ENDS
         END START

*******************************
#include <stdio.h>
void main()
{
printf("^_^欢迎进入c的世界\n");
}




红头发 发表于 2013-12-21 21:23:01

采用函数调用的方式
在函数体内
用以下结构插入汇编:
__asm
{
      (汇编内容)
}

艹樱散丿小羽 发表于 2013-12-21 21:31:51

貌似可以,要调用什么汇编函数

青玄 发表于 2013-12-22 14:53:00

红头发 发表于 2013-12-21 21:23 static/image/common/back.gif
采用函数调用的方式
在函数体内
用以下结构插入汇编:


老兄,你看一下是不是这样啊!

#include <stdio.h>
void main()
{
_asm
{
      DATAREA SEGMENT
CODE       DB         'ABCDEF'
BUFFER      DB      7, 0, 7 DUP(?)
MESS1      DB       'INPUT CODE:$'
MESS2      DB       0DH, 0AH, '$'
MESS3       DB      'OK!$'
MESS4       DB       'ERROR!PLESE REINPUT:$'
DATAREA ENDS
PROGRAM SEGMENT
MAIN PROC FAR
      ASSUME DS:DATAREA, ES:DATAREA, CS:PROGRAM
START:
         MOV AX, DATAREA
         MOV DS, AX
         MOV ES, AX
         LEA DX, MESS1
REINPUT:MOV AH, 09H
         INT 21H
         MOV DX, OFFSET BUFFER
         MOV AH, 0AH
         INT 21H
         LEA DX, MESS2
         MOV AH, 09H
         INT 21H
         MOV SI, OFFSET CODE
         MOV DI, OFFSET BUFFER + 2
         MOV CX, 6
         CLD
         REPE CMPSB
         JNE UNEQU
         MOV DX, OFFSET MESS3
         MOV AH, 09H
         INT 21H
         MOV AH, 04CH
         INT 21H
UNEQU:    MOV DX, OFFSET MESS4
          JMP REINPUT
   MAIN ENDP
PROGRAM ENDS
         END START
}
   printf("^_^欢迎进入c的世界\n");
}

但我编译了一下,出错了,这怎么回事儿啊!




红头发 发表于 2013-12-22 20:20:13

_asm{}中的汇编语言不能用伪指令!所以你如果要定义数据的话可以在_asm{}外用c语言的方法定义。

红头发 发表于 2013-12-22 20:21:15

或者用#include "windows.h"
然后再程序开始(_asm外面)用BYTE LABEL[]={0x10,0x20,0x30,0x00};定义

红头发 发表于 2013-12-22 20:23:38

msdn上专门有介绍asm的用法,详细讲明了不能用db,dw,....这些伪指令

正在写代码 发表于 2013-12-25 20:35:07

回复顶贴没意见吧!!{:7_183:}
页: [1]
查看完整版本: 怎样在C程序里面加上汇编代码进行编写-请大神指点指点