汇编语言实验 3 编程、编译、连接、跟踪

实验内容

(1)第1步,编写汇编源程序t1.asm, 源程序代码如下:

  assume cs:code

  code segment

        mov ah,2

        mov dl,3

        add dl,30h

        int 21h

        mov ah,2

        mov dl,6

        add dl,30h

        int 21h

         mov ah,4ch

        int 21h

code ends

end

因为对汇编语言的一系列还不熟练,所以花了点时间,终于进去了。

对源程序 t1.asm 进行汇编、连接、运行、调试

(1) 运行程序,观察程序输出结果是什么?

输出结果为36

(2) 将 line4和line9种寄存器dl 的值分别修改为 0~9 中任何一个数字,重新汇编→ 连接→运行,观察结果的变化。

我将line4中的值改为1,line9中的值改为4,

(3) 用debug对生成的可执行文件 t1.exe 进行调试。

① 使用 r 命令查看。观察寄存器 cx 的值是 多少;观察寄存器 ds 和 cs 的值是多 少,它们之间是否满足关系(cs)=(ds)+10H?

cx为0016H,cs为076A,ds为075A,符合关系(cs)=(ds)+10H。

② PSP(程序段前缀)的头两个字节是CD 20, 用debug查看PSP的内容,验证是否 如此。

的确如此

③ 使用 u 命令对 t1.exe 进行反汇编,观察反汇编得到的源代码。

反汇编得到的如图所示

④ 使用 t 命令和 p 命令(遇到 int 命令时,用 p 命令)单步调试,观察结果。

出现了3

出现了6

组成了最后t1.exe的36。

(2)第1步,编写汇编源程序t2.asm,源程序代码如下

assume cs:code

code segment

    mov ax,0b800h

    mov ds,ax

    mov bx,0

    mov [bx],0433h

      add bx,2

    mov [bx],0436h

    mov ax,4c00h

    int 21h

code ends

end

第2步,对源程序 t2.asm 进行汇编、连接、运行、调试

(1) 对t2.asm进行汇编、连接后,得到可执行文件t2.exe。运行t2.exe,观察程序运行 结果,验证是否在屏幕左上方出现红色的数值36

经过cls之后,重新输入t2,出现了目标结果

(2) 如果(1)结果得到验证,重新打开t2.asm,尝试将源代码中line7的0433h→0432h, line10 的 0436h→0439h, 然后重新汇编、连接,得到可执行文件 t2.exe。使用 cls 命令清 屏后,再次观察程序运行结果。

修改成功

出现了红色的29

(3) 如果(1)结果得到验证,重新打开t2.asm,尝试将源代码中line7的0433h→0333h, line10 的 0436h→0336h, 然后重新汇编、连接,得到可执行文件 t2.exe。使用 cls 命令清 屏后,再次观察程序运行结果。

修改成功

出现了蓝色的36

这个发现和之前的实验一最后一部分类似。

实验一向内存从B8100H开始的单元中填写数据,每一次填写的数据不一样会出现不同的表情符号,而这次编写代码0433h举例来说,mov这个操作,043三个字节决定了颜色的不同,最后一个字节决定了输出的内容。而【】符号似乎就是颜色的填充工具。

分析这次两个练习输出的不同

    mov ax,0b800h                    mov ah,2

    mov ds,ax                            mov dl,3

    mov bx,0                             add dl,30h

    mov [bx],0433h                   mov ah,2

      add bx,2                             mov dl,6

    mov [bx],0436h                   add dl,30h

第一次有一项add dl,30h即将数字转换为相对应的ASCII码打印出来,这个实验通过8位寄存器实现,而第二次是通过16位寄存器,直接输出。

实验总结

通过这次实验,我知道了一个完整汇编程序的输入输出的流程,学会了对于数字颜色的把控,以及两种输出的格式。

     

原文地址:https://www.cnblogs.com/-Cold/p/9865351.html

时间: 2024-10-12 12:52:14

汇编语言实验 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 endsend 2)用Debug跟踪t1.exe执行过程,写出每一步执行后相关寄存器内容和栈顶内容 3)PSP头2个字节是CD20,用Debug加载t1.e

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

预备知识: 一个汇编语言程序从写出到执行的简要过程: 一:编写汇编源程序: 二:对源程序进行编译连接:可执行文件包含两部分内容:1.程序(指令机械码)和数据(程序定义的数据).2.相关信息描述 三:执行可执行文件中的程序 课本P94: (1) 将下面的程序保存为t1.asm文件,将其生成可执行文件t1.exe. assume cs:codesg   codesg segment           mov ax,2000H           mov ss,ax           mov sp

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

学号:20171308150 姓名:江漪雯 班级:17计科4班 实验结论 一.练习1 第一步,编写汇编源程序 t1.asm,源程序代码如图 1-1 所示. 第二步,对源程序 t1.asm 进行汇编.连接.运行.调试 首先打开DOSBOX界面,输入如下指令,进入edit界面. 然后会出现以下界面,点击Enter进入. 输入指定代码,并保存为t1.asm. 然后进行编译 连接 运行 1)运行程序,观察程序输出结果是什么? 36 2)将 line4 和 line9 种寄存器 dl 的值分别修改为 0~

实验作业:使gdb跟踪分析一个系统调用内核函数

实验作业:使gdb跟踪分析一个系统调用内核函数(我使用的是getuid) 20135313吴子怡.北京电子科技学院 [第一部分] 根据视频演示的步骤,先做第一部分,步骤如下 ①更新menu代码到最新版 ②在代码中加入C函数.汇编函数 ③在main函数中加入makeconfig ④make rootfs ⑤可以看到qemu中增加了我们先前添加的命令: ⑥分别执行新增的命令 [第二部分]gdb跟踪分析一个系统调用内核函数 ①进入gdb调试 ②设置断点,继续执行: ③相对应的得到这样的结果: ④查看我

汇编语言 实验五

1.将下面的程序编译连接,用Debug加载.跟踪,然后回答问题. assume cs:code,ds:data,ss:stack data segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h data ends stack segment dw 0,0,0,0,0,0,0,0 stack ends code segment start:  mov ax,stack mov ss,ax mov sp,16 mov ax,data m

汇编语言实验9

四.实验内容 补全程序 t1.asm,完成在屏幕上输出内存单元中的十进制两位数 源代码及其注释: 编译连接运行测试结果: 2. 补全程序 t2.asm,完成在屏幕上输出 data 段定义的 5 个十进制两位数,数据和数据 之间以空格间隔. 源码及其注释如下: 编译连接运行后的结果:. 教材实验 9(P187) 编程:在屏幕中间分别显示绿色,绿底红色.白底蓝色的字符串'Welcome to masm!'. 源码及其相关注释如下: 运行结果测试; 五.实验总结 此次实验考察了对十进制数的打印以及字符

在Linux的连接跟踪(nf_conntrack)中缓存私有数据省去每次查找

前面说过很多次,conntrack作为一中连接跟踪机制,如果它本身是可扩展的,那么将会是多么令人激动的一件事,当你看了N多文档代码之后,你发现它确实是可以扩展的,但是却没有感到激动,因为你可能发现:1.它可以注册一个account扩展,但是计数机制却很原始:2.我希望增加一个新型的扩展,却不得不重新编译内核:怎 么办?我曾经很生气地默默指责过当初实现这个的人,想当然的认为将扩展本身也做成可扩展的,而不是写死几个特定的扩展将是一个多么容易的事,我一直憋着没 有去做这个实现,就是因为觉得它太简单,在

Netfilter&iptables:如何理解连接跟踪机制?

如何理解Netfilter中的连接跟踪机制? 本篇我打算以一个问句开头,因为在知识探索的道路上只有多问然后充分调动起思考的机器才能让自己走得更远.连接跟踪定义很简单:用来记录和跟踪连接的状态. 问:为什么又需要连接跟踪功能呢? 答:因为它是状态防火墙和NAT的实现基础. OK,算是明白了.Neftiler为了实现基于数据连接状态侦测的状态防火墙功能和NAT地址转换功能才开发出了连接跟踪这套机制.那就意思是说:如果编译内核时开启了连接跟踪选项,那么Linux系统就会为它收到的每个数据包维持一个连接

VC编译连接选项详解(转)

大家可能一直在用VC开发软件,但是对于这个编译器却未必很了解.原因是多方面的.大多数情况下,我们只停留在“使用”它,而不会想去“了解”它.因为它只是一个工具,我们宁可把更多的精力放在C++语言和软件设计上.我们习惯于这样一种“模式”:建立一个项目,然后写代码,然后编译,反反复复调试.但是,所谓:“公欲善其事,必先利其器”.如果我们精于VC开发环境,我们是不是能够做得更加游刃有余呢? VC的处理流程,大致分为两步:编译和连接.源文件通过编译生成了.obj文件:所有.obj文件和.lib文件通过连接