找回密码
 register

QQ登录

只需一步,快速开始

查看: 29|回复: 0

[汇编语言] [零基础入门学习]·22·第一个程序·实验3编程、编译、连接、跟踪

[复制链接]

[汇编语言] [零基础入门学习]·22·第一个程序·实验3编程、编译、连接、跟踪

[复制链接]
  • 打卡等级:热心大叔
  • 打卡总天数:91
  • 打卡月天数:14
  • 打卡总奖励:91
  • 最近打卡:2025-01-15 02:59:34
Waylee

主题

0

回帖

1万

积分

仙帝

积分
11890
Waylee 2025-1-1 20:20 | 显示全部楼层 |阅读模式 | Google Chrome | Windows 10

马上注册,查看网站隐藏内容!!

您需要 登录 才可以下载或查看,没有账号?register

×

实验3 编程、编译、连接、跟踪

一、将下面的程序保存为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

雪舞答:
打开DOSBox 0.74-3后进入到编程序的目录,
首先执行 masm t1;将t1.asm编译成t1.obj文件。
再执行link t1;将t1.obj文件连接生成可执行文件t1.exe

二、用Debug跟踪t1.exe的执行过程,写出每一步执行后,相关寄存器中的内容和栈顶的内容。

1.使用debug程序启动调试
1.webp 2.执行mov ax,2000
2.webp
3.执行mov ss,ax
3.webp
4.执行add sp,0A
4.webp
5.执行pop ax
5.webp
6.执行pop bx
6.webp
7.执行push ax
7.webp
8.执行push bx
8.webp
9.执行pop ax
9.webp
10.执行pop bx
10.webp
11.执行mov ax,4c00H
11.webp

三、POP头的两个字节是CD 20,用Debug加载t1.exe,查看PSP的内容。

001.webp
为啥上图中,查看的内存起始地址是 ds:0, 而非 cs:ip 呢?
因为在DOS系统中,exe文件被加载进内存后的位置结构图如下所示。

88.webp
首先找到一段容量足够的空闲内存区 SA:0,并将该内存区的段地址存入 DS 寄存器中;
然后在此内存区的前 256 个字节中,创建一个称为程序段前缀(PSP)的数据区,DOS要利用PSP来和被加载程序进行通信;
最后,再将待执行程序加载进内存地址 SA + 10H:0 开始的空间中。


注意,一定要做完这个实验才能进行下面的课程

您需要登录后才可以回帖 登录 | register

本版积分规则

雪舞知识库 | 浙ICP备15015590号-1 | 萌ICP备20232229号|浙公网安备33048102000118号 |天天打卡

GMT+8, 2025-1-15 13:38 , Processed in 0.126044 second(s), 10 queries , Redis On.

Powered by XueWu Licensed

Copyright © Tencent Cloud.

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