登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

IA32 Assembler

作者:abcabcabc 栏目:嵌入式系统
IA32 Assembler
上传到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
楼主很猛啊
 
3楼: >>参与讨论
abcabcabc
也不是啦,可以写arm 51系列,或者自定义也可以
 
4楼: >>参与讨论
csword
分享源码来娱乐下大众啦.哈哈
 
5楼: >>参与讨论
enruan
是啊
 
6楼: >>参与讨论
abcabcabc
还没有搞到空间
写得很垃圾拉,给各位见笑了,我过几天搞个空间上传一下。

7楼: >>参与讨论
fjlypp
大侠 你搞X86用什么工具啊?
我在抄一块用am186的控制板
想分析它的程序但不懂怎么拼接用什么工具反汇编
能教教我吗?

8楼: >>参与讨论
abcabcabc
我用x86汇编写的。



* - 本贴最后修改时间:2005-1-19 19:53:40 修改者:abcabcabc

9楼: >>参与讨论
abcabcabc
上传了
http://www.golfingworld.net/xx86.txt
http://www.golfingworld.net/xx86.com
http://www.golfingworld.net/xx86.zip

下载地址如上

10楼: >>参与讨论
crazyeda
是挺猛,你是做作业还是公司要求的
 
11楼: >>参与讨论
abcabcabc
不是做作业的,也不是公司要求
 

* - 本贴最后修改时间:2005-1-19 19:55:14 修改者:abcabcabc

12楼: >>参与讨论
su_mj000
如果写Assembler或Compiler之类的软件
一般都得使用flex(lex)和bison(yacc)作为工具(都是免费)。

否则,含各类运算的表达式如何处理,如

     mov ax, 100 + (200 >> 2)



13楼: >>参与讨论
abcabcabc
补上了32位IEEE754浮点数支持,修正了错误
   mov ax, 100 + (200 >> 2)  这个支持。

除了浮点数不能作为操作数运算之外,整型的都可以。
例如 200>>-2 等于 200<<2

14楼: >>参与讨论
enruan
没有源码吗?
 
15楼: >>参与讨论
abcabcabc
加上mmx sse sse2 sse3指令集
 
16楼: >>参与讨论
enruan
加油啊
期待用国产的编译器和汇编器

对了,你不会是完全自立更生了吧
你不会是用汇编写的,然后用自己的assembler汇编的吧?
   


17楼: >>参与讨论
abcabcabc
是用自己的assembler编译的
语法结构我用了nasm的格式,开始的时候用nasm来编译,后来自己可以编译自己的源代码。现在用nasm来编译也不行了,已经out of MEMORY


18楼: >>参与讨论
enruan
哈哈,帅哥,你好强啊
 
19楼: >>参与讨论
enruan
那你是用汇编写的喽?
还是C(不会还有别的吧,哈)写的然后生成的汇编?

20楼: >>参与讨论
enruan
我顶.
 
参与讨论
昵称:
讨论内容:
 
 
相关帖子
PC的串口老容易烧坏,有什么好方法保护啊?
求救,82c54方式2下为什么不能用GATE控制重新计数?
USB OTG接口设计者&Phillip芯片应用高手看过来
使用S3C2410+WINBOND83977扩并口和PS/2
求救---89c51和29f040之间的接线图,以及汇编程序
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号