鱼C论坛

 找回密码
 立即注册
查看: 2784|回复: 7

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

[复制链接]
发表于 2013-12-21 19:08:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
高手们,我想在一个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");
}




想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-21 21:23:01 | 显示全部楼层
采用函数调用的方式
在函数体内
用以下结构插入汇编:
__asm
{
      (汇编内容)
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-21 21:31:51 | 显示全部楼层
貌似可以,要调用什么汇编函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-22 14:53:00 | 显示全部楼层

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

#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");
}

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

QQ截图20131222145212.png


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-22 20:20:13 | 显示全部楼层
_asm{}中的汇编语言不能用伪指令!所以你如果要定义数据的话可以在_asm{}外用c语言的方法定义。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-22 20:21:15 | 显示全部楼层
或者用#include "windows.h"
然后再程序开始(_asm外面)用BYTE LABEL[]={0x10,0x20,0x30,0x00};定义
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-22 20:23:38 | 显示全部楼层
msdn上专门有介绍asm的用法,详细讲明了不能用db,dw,....这些伪指令
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-25 20:35:07 | 显示全部楼层
回复顶贴没意见吧!!{:7_183:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-16 01:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表