您的位置:首页 > 编程语言

《汇编语言》学习(四)汇编程序

2016-09-29 16:59 253 查看
    《汇编语言》第四章主要介绍“汇编程序从源码编写到执行和调试的过程”,包括:源码编写、源码构成、编译和链接、加载和返回shell、运行和调试。

    本章是一般原理性的内容,没有安排练习题,只有一个实验题。在此,我将用一个思维导出来总结本章的知识点,并分享我搭建实验环境的过程,和给出实验题调试过程。

一、知识图谱



二、环境搭建

    本系列第一篇博文我就提到了,我的汇编学习环境是在虚拟机中“win7 x86”下进行的。一开始,我通过bing搜索“win7 汇编编译器”,发现了微软官方的http://www.masm32.com/ 提供masm32的下载。然后按照网上的教程进行安装,安装过程很简单,一路按“下一步或确认”即可,除了选择安装路径外。

    安装好masm32,会在桌面上生成一个快捷方式。它是一个32位的汇编程序开发IDE,像一个超级简易版的VS,提供源码编辑、编译、链接和debug功能。

    我在masm32的IDE中,安装《汇编语言》的示例一步步操作,编辑源码和编译都正常,到链接时,报错:

LINK: error LINK2001: unresolved external symbol _WinMainCRTStartup

    使用这个错误信息去搜索,有大牛说,masm32只支持Windows汇编,而《汇编语言》中的汇编代码是DOS下的汇编。或者说,masm32支持的是32位汇编,而本书实验的是16位汇编。

    此后,我有尝试搜索,最终找到这个帖子:
http://www.cnblogs.com/S-E-P/archive/2011/05/18/2049730.html
    下载该帖中的16位masm,解压到c盘根目录下,即可安装《汇编语言》一书中的操作,一步步实验了。

三、实验题

1,源码——t1.asm

assume cs:codesg
codesg segment
mov ax,2000h
mov ss,ax
mov sp,0
add sp,10
pop ax
pop bx
push ax
push bx
pop ax
pop bx

mov ax,4c00h
int 21h
codesg ends
end


2,编译和链接



3,调试



分析:

1)初始时,DS是该程序所在内存区的段地址,也即PSP的段地址。默认偏移地址为0。

2)cx存放程序的长度。

3)给SS赋值时,SP也被执行,参看上面的第二条t执行后的状态。

4)最初,SP设置为0,表示满栈,此时只能进行出栈操作。但事实上,CPU不会现在用户对栈的操作,用户需要自己管理栈空间和操作。



分析:

1)程序中设定的栈空间的会临时保存寄存器的信息,如cs ip ax等。

2)临时信息从右往左排列,随着栈指针的移动而移动。



注:pop和push可以实现数据交互



最后,执行“int 21h”指令时,需要用p-perform。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: