- 浏览: 2494 次
最新评论
文章列表
编译:
ml /c /coff /Cp hello.asm
这一步生成hello.obj文件。
链接目标文件:
link /SUBSYSTEM:WINDOWS /LIBPATH:D/masm32/lib hello.obj
这一步生成exe可执行文件。运行hello.exe会出现一个消息框。
1.cs+ip确定了一个代码段物理地址,这段内存地址被cup看成一个栈,
这个地址是没办法通过普通方法来改变的,最常见的使用jmp语句
例:jmp 2ae3:3 执行后:cs=2ae3,ip=0003h,若只想修改ip,那可以用jmp 某个寄存器,来改变ip的内容.
2.ss+sp确认了一个代码段的栈顶;
3.ds+[]确定了一个数据地址.[]为偏移地址,ds内的值不能通过常规方法改变,
只能通过中转的方式,如:mov ax,1000 mov ds,ax
4.cpu中用16位存放寄存器存放一个字.因为内存只能存一个字节,所以字的低八
位对应内存的低位,内存的高八位对应内存的高位.
5.关于栈顶 ...
从今天起,开始学习asm,也是我第一次写博客,我会把我所有的学习记录存到博客上,记录我的学习历程
内存和寄存器大小
1.一个内存地址对应的内存空间为1byte
2.寄存器可以存放16位二进制数,即2byte
win7 64位使用DOSBox0.74-win32-installer+debug32调试asm;
使用步骤:比如debug32放在d盘下, mount c d:/ c:debug
debug常用命令
1.-r 查看寄存器
2.-d 查看内存
3.-e 改写内存中的内容 -a以汇编的形式改写内存中的内容
4.-u 查看内存中机器码的定义(就是汇编指令)
5.-t 执行内存中的机器码(执行cs:id对应的机器码,行后ip指向下一个指令)