#include <stdio.h>
#include <dos.h>
#include <bios.h>
extern unsigned char asc[256*16];
void draw_a_char(int x, int y, unsigned char *pasc)
{
unsigned char far *p, far *py, far *px, color;
int r, c;
p = (unsigned char far *)0xA0000000 + (y*320+x);
for(r=0; r<16; r++) /* 一共画16行 */
{
py = p+r*320; /* py->行的起点 */
for(c=0; c<8; c++) /* 每行画8个点 */
{
if(*pasc & 1<<(7-c)) /* 从最高位到最低位逐位检测第7-c位是否为1, 若为1则画红点, 若为0则画蓝点 */
color = 0x0C; /* 前景为高亮度红色 */
else
color = 0x01; /* 背景为蓝色 */
px = py+c; /* px->行中的某个点 */
*px = color; /* 画一个点 */
}
pasc++;
}
}
main()
{
unsigned char buf[100], *pasc;
int i;
int x, y;
gets(buf); /* 输入一行字符 */
_AX = 0x0013;
geninterrupt(0x10); /* 切换到320*200*256色图形模式 */
x = 0;
y = 0;
i = 0;
while(buf[i] != '\0')
{
pasc = &asc[buf[i] << 4]; /* pasc->8*16点阵中的首字节,1个字节代表水平方向的8个点 */
draw_a_char(x, y, pasc);
x += 8;
if(x >= 320) /* 若x坐标超过屏幕右边界... */
{
x = 0;
y += 16; /* 则y坐标换到下一行 */
}
i++;
}
bioskey(0); /* 敲任意键, 对应的汇编代码是mov ah,0; int 16h */
_AX = 0x0003;
geninterrupt(0x10); /* 切换到80*25文本模式 */
}
这个在线网站可以可以将C、C++、Python、Rust、Pascal等多种语言使用多种类型的编译器进行在线编译,可以实时看到输出的汇编/字节码程序http
随便找个C编译器,不都有选项,设置输出对应C的ASM汇编吗?
我这只有windows环境,要是windows代码可以直接帮你生成asm文件
这是几种方法
1.使用gcc
使用gcc -S 1.c可以把1.c转成特殊的1.s,感觉其实是类似于汇编,然后可以修改其代码,要想继续编译可以用gcc -s 1.s然后就可以实现
2.使用VC++ 编译器 自带的 dumpbin 就可以 做反汇编。
如vc++中在C:\Program Files\Microsoft Visual Studio\VC98\BIN\DUMPBIN.exe
dumpbin /DISASM abc.exe
dumpbin /DISASM abc.exe /OUT:abc.asm
3.在vc或者vs的时候按alt+8可以进行汇编调试,不仅可以查看程序的汇编代码,而且也可以查看此时的变量。
4.通过修改项目 -> 属性 -> C/C++ -> 输出文件 -> 汇编输出之后,每次运行后都可以在debug下面找到一个asm文件
具体环境呢?是windows还是有自己的系统?
三种方法:
使用 g++ -S test.s test.cpp
生成汇编代码。(test.cpp为目标文件源码,test.s为预生成的汇编代码文件)。注:此方式生成的汇编与源文件无关联,不易阅读。
使用 objdump -S tt.exe
生成汇编文件。此方式生成汇编文件与源文件具有关联关系,便于阅读。(注意这里的tt.exe是 gcc 编译式添加 -g 指令生成的dbug版本。)
除此之外,对于一些ide都有反汇编的功能,例如Visual studio。
你代码都是错的,还有,你要提供你的所有头文件和lib
方法一,Linux环境下进行编译可得到汇编文件
方法二,VS调试状态下,进行反汇编
用keil C的反汇编功能,很快而且准确