|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
IA32 Assembler |
作者:abcabcabc 栏目:嵌入式系统 |
上传到ftp://ftp.21ic.com.cn xx86 是16位x86汇编语言编译器,生成16/32位二进制机器代码,运行在实模式下, 语法基本与Netwide Assembler类似。 支持 条件编译: ifdef ifndef endif 支持 MMX SSE SSE2 SSE3 指令集 不支持 include预处理指令 命令行格式:xx86 源文件 二进制文件 伪指令: db - 定义1个字节数据 db 1, 2, 1 + 2, 3 + label_01, 10 * 4 dw - 定义2个字节数据 dw 1, 2, 1 + 2, 3 + label_01, 10 * 4 dd - 定义4个字节数据 dd 1, 2, 1 + 2, 3 + label_01, 10 * 4 resb n - 保留n个字节未初始化数据 [ resb 100 ] 可在一条指令中同时指定db dw dd 伪指令。例如: db 100 dw 1000 操作数大小: byte - 1个字节 cmp byte [ebp+eax*8+1234],100 word - 2个字节 mov dx,word [bp+4] dword - 4个字节 and edx,dword [esp+ebx+5678] qword - 8个字节 movq mm0,qword [ebx] tword - 16个字节 addps tword [ebp+8],xmm7 寻址方式: SHORT - 8位 ja SHORT label01 near - 16位 jnb near label02 far - 32位 jne far label03 系统指令: equ或= - 定义标签值 [ label_01 equ 1234 ], 标签label_01的值为1234 org - 设定程序起点 [ org 100h ], 设定程序起点为100h times - 指定重复生成当前指令代码的次数 [ times 10 db 'ABCD' ] bits16 - 生成16位代码 bits32 - 生成32位代码 常量: 支持2,8,10,16进制整型;32位单精度浮点 格式: 0x12, 12h ;十六进制 12 ;十进制 12o ;八进制 1010B ;二进制 "abc" ;文本串 'abc' ;文本串 12345.6789E10 ;32位单精度浮点 EIP: 当前EIP值用'$'符号表示。例如:MOV AX,$ ;将EIP低16位存入AX寄存器 操作符: ~ 取补 高优先级 * / % 乘 除 求余 + - 加 减 & | ^ 位与,位或,位异或 << >> 移位 低优先级 有效地址格式: [bx] [bx+1] [bx+si] [bx+si+1] [eax] [eax+1] [ebx*4] [ebx+8+1234] [eax+ebx+1] [eax+ebx*2] [eax+ebx*2+1] [123] 指定8位偏移值 [byte bx+1] 指定16位偏移值 [word bx+1] 指定32位偏移值 [dword ebx+esi*8+1000] 指定段前缀 [es: bx+si+100] 指定32位偏移值及段前缀 [dword fs:eax+edi*4] 所有指令的操作数均按照INTEL(c)IA32指令集参考来定义,某些指令不能指定内存操作数的大小 例如:lds dx,[SrcFH] Jcc指令默认为有符号8位跳转(-128/127),16位,32位跳转要指定near或far寻址方式 例如: label01: mov ax,dx ... cmp [bx],-1 jne label01 ... cmp dx,100 ja near label01 Jmp指令格式: jmp label01 jmp SHORT label02 jmp near label03 jmp far label04 jmp bx jmp edx &nbs |
2楼: | >>参与讨论 |
作者: enruan 于 2005/1/5 12:36:00 发布:
楼主很猛啊 |
3楼: | >>参与讨论 |
作者: abcabcabc 于 2005/1/5 13:33:00 发布:
也不是啦,可以写arm 51系列,或者自定义也可以 |
4楼: | >>参与讨论 |
作者: csword 于 2005/1/6 13:58:00 发布:
分享源码来娱乐下大众啦.哈哈 |
5楼: | >>参与讨论 |
作者: enruan 于 2005/1/6 14:11:00 发布:
是啊 |
6楼: | >>参与讨论 |
作者: abcabcabc 于 2005/1/6 15:45:00 发布:
还没有搞到空间 写得很垃圾拉,给各位见笑了,我过几天搞个空间上传一下。 |
7楼: | >>参与讨论 |
作者: fjlypp 于 2005/1/6 19:18:00 发布:
大侠 你搞X86用什么工具啊? 我在抄一块用am186的控制板 想分析它的程序但不懂怎么拼接用什么工具反汇编 能教教我吗? |
8楼: | >>参与讨论 |
作者: abcabcabc 于 2005/1/7 0:33:00 发布:
我用x86汇编写的。 * - 本贴最后修改时间:2005-1-19 19:53:40 修改者:abcabcabc |
9楼: | >>参与讨论 |
作者: abcabcabc 于 2005/1/12 16:34:00 发布:
上传了 http://www.golfingworld.net/xx86.txt http://www.golfingworld.net/xx86.com http://www.golfingworld.net/xx86.zip 下载地址如上 |
10楼: | >>参与讨论 |
作者: crazyeda 于 2005/1/12 22:05:00 发布:
是挺猛,你是做作业还是公司要求的 |
11楼: | >>参与讨论 |
作者: abcabcabc 于 2005/1/13 0:38:00 发布:
不是做作业的,也不是公司要求 * - 本贴最后修改时间:2005-1-19 19:55:14 修改者:abcabcabc |
12楼: | >>参与讨论 |
作者: su_mj000 于 2005/1/13 8:48:00 发布:
如果写Assembler或Compiler之类的软件 一般都得使用flex(lex)和bison(yacc)作为工具(都是免费)。 否则,含各类运算的表达式如何处理,如 mov ax, 100 + (200 >> 2) |
13楼: | >>参与讨论 |
作者: abcabcabc 于 2005/1/13 17:33:00 发布:
补上了32位IEEE754浮点数支持,修正了错误 mov ax, 100 + (200 >> 2) 这个支持。 除了浮点数不能作为操作数运算之外,整型的都可以。 例如 200>>-2 等于 200<<2 |
14楼: | >>参与讨论 |
作者: enruan 于 2005/1/15 14:47:00 发布:
没有源码吗? |
15楼: | >>参与讨论 |
作者: abcabcabc 于 2005/1/19 1:37:00 发布:
加上mmx sse sse2 sse3指令集 |
16楼: | >>参与讨论 |
作者: enruan 于 2005/1/19 18:41:00 发布:
加油啊 期待用国产的编译器和汇编器 对了,你不会是完全自立更生了吧 你不会是用汇编写的,然后用自己的assembler汇编的吧? |
17楼: | >>参与讨论 |
作者: abcabcabc 于 2005/1/19 20:10:00 发布:
是用自己的assembler编译的 语法结构我用了nasm的格式,开始的时候用nasm来编译,后来自己可以编译自己的源代码。现在用nasm来编译也不行了,已经out of MEMORY。 |
18楼: | >>参与讨论 |
作者: enruan 于 2005/1/19 20:16:00 发布:
哈哈,帅哥,你好强啊 |
19楼: | >>参与讨论 |
作者: enruan 于 2005/1/19 20:20:00 发布:
那你是用汇编写的喽? 还是C(不会还有别的吧,哈)写的然后生成的汇编? |
20楼: | >>参与讨论 |
作者: enruan 于 2005/1/31 10:58:00 发布:
我顶. |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |