汇编流程, 云+的md好像不支持流程图(汗), 我给出md的流程图代码和对应图片.
st=>start: 开始
op1=>operation: 编辑程序
op2=>operation: 汇编(masm)(.lst)
op3=>operation: 连接(link)
op4=>operation: 调试(debug)
cond1=>condition: 语法有错?(.crf)
cond2=>condition: 程序正确?
i1=>inputoutput: 源程序文件(.asm)
i2=>inputoutput: 目标程序文件(.obj)
i3=>inputoutput: 可执行文件(.exe .map)
e=>end: 结束
st->op1->i1->op2->cond1
cond1(yes)->op1
cond1(no)->i2->op3->i3->op4->cond2
cond2(yes)->e
cond2(no)->op1
关于win10 debug环境搭建, 我就不多说了, 网上搜搜, 挺多的. 直接撰写源码, 就是往ax和bx放入数据, 然后相加:
assume cs:hw
hw segment
mov ax, 1200h
mov bx, 0034h
add ax, bx
mov ax, 4c00h
int 21h
hw ends
end
汇编语言源程序经MASM汇编后,可以产生3个文件:目标文件(.OBJ)、列表文件(.LST)、交叉引用文件(.CRF)。
连接程序LINK.EXE能够把一个或多个独立的目标文件和定义在库文件(.LIB)中的子程序与变量,连接装配成一个可重定位的可执行文件(.EXE)
在连接过程中,除了生成可执行文件(.EXE)外,还可以根据用户的指定,生成相应的内存映像文件(.MAP)
在masm命令行结尾加上分号";", 就会直接生成.obj文件, 忽略掉中间文件, 列表文件(.LST)、交叉引用文件(.CRF).
同理, link命令行结尾加上分号, 忽略掉内存映像文件(.MAP), 直接生成.exe文件.
可以通过debug对生成的.exe进行调试, 利用r可以查看寄存器状态. 利用u可以查看其他指令.
t可以进入单步调试
p可以结束程序
全部指令如下:
标志位 | 置位 | 复位 |
---|---|---|
溢出位OF | OV | NV |
方向位DF | DN | UP |
中断位IF | EI | DI |
符号位SF | NG | PL |
零值位ZF | ZR | NZ |
辅助进位AF | AC | NA |
奇偶位PF | PE | PO |
进位位CF | CY | NC |
mac上会比较简单, 利用homebrew安装nasm, 利用nasm -v
确认是否安装成功
brew install nasm
global _MAIN
_MAIN:
mov ax, 1200h
mov bx, 0034h
add ax, bx
mov rax,0x2000001
mov rdi,0
syscall
汇编代码其实也在一直变化, 作为非汇编程序员, 其实能看明白就可以了, 原理是类似的. 利用nasm生成.obj文件, 利用gcc生成.out文件(需要用-e指定入口, 这里是_MAIN), 执行即可.
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。