shuiyu 发表于 2017-7-2 20:16:33

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

小白刚学,不对的请各位大佬指正,谢谢{:10_254:}

实验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会自动改写成大写的文件名{:10_250:} ...不知道大家是不是这样)


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


(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字节处向后的空间存放的是程序。(其实就是上一节课的内容)

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




谢谢小甲鱼带来的视频教程,感谢!! {:10_303:}


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

senwang91 发表于 2018-9-29 21:48:13

我的运行到一半就自动退出了

我不想说什么 发表于 2018-10-4 11:28:15

非常谢谢你

446546406 发表于 2018-10-17 21:04:06

(3),(2),程序所在的内存区地址是CS:0
CS:0是代码段
DS:0是数据段
PSP就是代码段向低位偏移256字节空间,被分为数据段
我说的应该没错吧
页: [1]
查看完整版本: 《零基础入门学习汇编语言》实验三