鱼C论坛

 找回密码
 立即注册
查看: 4094|回复: 3

[学习笔记] 《零基础入门学习汇编语言》实验三

[复制链接]
发表于 2017-7-2 20:16:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
小白刚学,不对的请各位大佬指正,谢谢

实验3 编程、编译、连接、跟踪  
(1) 将下面的程序保存为t1.asm文件,将其生成可执行文件t1.exe。

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

解:
1.首先使用Notepad++编辑器输入以上命令。保存为t1.asm.
2.使用命令:MASM.EXE t1.asm;  命令直接生成t1.obj文件。
3.使用命令:LINK.EXE t1.obj;  命令直接生成t1.exe文件。(我的debug会自动改写成大写的文件名 ...不知道大家是不是这样)


(2) 用DEBUG跟踪t1.exe的执行过程,写出每一步执行后,相关寄存器的内容和栈顶内容。
解:
1.在t1.exe所在文件夹下使用:debug t1.exe命令(使用debug加载程序)。发现直接进入debug了,而且CS和IP都直接指向了t1.exe文件的开始。
2.直接使用T命令单步执行。就可以看到相关寄存器的内容和栈顶内容。(这里我就不仔细讲了,下图只是一部分)
1.PNG

(3)PSP的头两个字节是CD20,用DEBUG加载t1.exe,查看PSP的内容。
解:
(1)直接使用:U 0B25:0 100 命令或者D 0B25:0 100就可以看到了.
(2)至于为什么是0B25:0这个地址呢?
因为:程序加载后,ds中存放着程序所在内存区的段地址,这个内存区的偏移地址为 0 ,则程序所在的内存区的地址为:ds:0;这个内存区的前256 个字节中存放的是PSP,dos用来和程序进行通信。从 256字节处向后的空间存放的是程序。(其实就是上一节课的内容)

下图是该小题的主要内容:
2.PNG



谢谢小甲鱼带来的视频教程,感谢!!


   
本节结束,多谢览阅!
小白刚学,不对的请各位大佬指正,谢谢

评分

参与人数 1鱼币 +5 收起 理由
小甲鱼 + 5

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-29 21:48:13 | 显示全部楼层
我的运行到一半就自动退出了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-4 11:28:15 | 显示全部楼层
非常谢谢你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-17 21:04:06 | 显示全部楼层
(3),(2),程序所在的内存区地址是CS:0
CS:0是代码段
DS:0是数据段
PSP就是代码段向低位偏移256字节空间,被分为数据段
我说的应该没错吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-27 13:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表