实验5:编写与调试多段汇编语言程序

更新:11-15 民间故事 我要投稿 纠错 投诉

本篇文章给大家谈谈实验5:编写与调试多段汇编语言程序,以及对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

数据结束

堆栈段

dw 0,0,0,0,0,0,0,0,0,0,0,0,0

堆栈结束

代码段

start: mov ax,堆栈

移动SS,斧头

mov sp,20H

移动斧头,数据

mov ds,ax

移动bx,0

莫夫CX,8

s: 推[bx]

添加bx,2

循环

移动bx,0

莫夫CX,8

s0: 流行[bx]

添加bx,2

循环s0

移动斧头,4c00H

整数21H

代码结束

end start 段名code data stack表示code段范围内的段地址开始,因此CPU会以code段中的内容作为指令执行

实验5

问题(1)

假设cs:code,ds:data,ss:stack

数据段

dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H

数据结束

堆栈段

dw 0,0,0,0,0,0,0,0,0,0

堆栈结束

代码段

start: mov ax,堆栈

移动SS,斧头

移动SP,16

移动斧头,数据

mov ds,ax

推ds:[0]

推ds:[2]

流行DS:[2]

流行DS:[0]

移动斧头,4c00H

整数21H

代码结束

end startDS SS CS段地址X,堆栈段的段地址为X-2,数据段的段地址为

数据段

dw 0123H,0456H

数据结束

堆栈段

dw 1111H,1111H

堆栈结束

代码段

start: mov ax,堆栈

移动SS,斧头

移动SP,16

移动斧头,数据

mov ds,ax

推ds:[0]

推ds:[2]

流行DS:[2]

流行DS:[0]

移动斧头,4c00H

整数21H

代码结束

最后开始书中的源代码用0000,0000填充初始堆栈空间。我觉得理解问题不方便,所以修改为2个字库数据1111H,1111HDS SS CS如果该段中的数据占用N个字节,那么程序加载后,这一段实际占用多少空间?回答:(N/16+1)x16,表示填写16的倍数(DEBUG中,截图看起来是一整行)。比如这道题,数据data段占用了4个内存单元(即4个字节),仍然需要将最后一个零填满,填入剩余12个内存单元。 (N/16+1) 1010的第(1)题和第(2)题代码的区别假设cs:code,ds:data,ss:stack

代码段

start: mov ax,堆栈

移动SS,斧头

移动SP,16

移动斧头,数据

mov ds,ax

推ds:[0]

推ds:[2]

流行DS:[2]

流行DS:[0]

莫夫斧头,4C00H

整数21H

代码结束

数据段

dw 0123H,0456H

数据结束

堆栈段

dw 1111H,1111H

堆栈结束

end startSS DS CSdata 段一行完成,但stack 段未完成。问题(3)与前两题源代码的区别在于,data段的代码放在stack段的代码后面;010- 1010“整行补齐”的代码正确执行。如果去掉data段以及stack段,编译器会依次执行code段

问题(2)

假设cs:代码

一段

分贝1,2,3,4,5,6,7,8

结束

b段

分贝1,2,3,4,5,6,7,8

b 结束

C段

分贝0,0,0,0,0,0,0,0

c 结束

代码段

启动:

移动斧头,a

移动es,ax

移动斧头,c

mov ds,ax

移动bx,0

莫夫CX,4

s1: mov ax,es:[bx]

添加[bx],ax

添加bx,2

循环s1

移动斧头,b

移动es,ax

移动斧头,c

mov ds,ax

移动bx,0

莫夫CX,4

s2: mov ax,es:[bx]

添加[bx],ax

添加bx,2

循环S2

莫夫斧头,4C00H

整数21H

代码结束

end startmov cx 4.png 遇到loop命令时,按debug [P命令]全部执行问题(五)使用问题(3)定义入口start数据,即从上往下,只占用db关键词db 1, 2 ,3,4,5,6,7,8实际上是db 01,02,03,04,05,06,07,08,字节型占用8位循环,在循环中使用add bx,2.其实就是用字体(16位)来传输的,或者说1个内存单元可以传输,因为恰好是8个数据。这样的话,每个8个内存单元其实只需要看做一个字为单元,代码需要写为mov cx,4

问题(3)

我对题源代码做了3处修改,观察真正的循环数db 1, 2,3,4,5,6,7,8,9,9,9,9,9,9,9,9

莫夫CX,8

mov cx,8 可以看到,如果循环数设置为8,则实质上访问了16个内存单元。不仅计算前8个数据,还计算接下来的8个数据。试想一下,因为代码先写段a,再写段b,所以内存中实际上是低位内存会送到低位寄存器,高位内存地址会送到高位寄存器。使用es:[bx]进行遍历。如果是add bx,2,那么也是依次遍历两个内存单元。这里的关键是按顺序进行。如果我碰巧没有整行零需要填写怎么办?这里有多余的零,所以暂时感觉结果是对的,但是循环次数就是循环次数。需要添加8条数据,即8次数据操作。后面的数据不能一起操作。 mov cx 8 结合add bx 2 本质遍历16个内存单元.png

问题(4)

mov ax,es:[bx]

添加[bx],ax

add bx,2es:[bx]计算出一个物理地址mov ax,es:[bx],将从上述物理地址开始的2个内存单元(视为一个字)写入到ax中(低地址送入低位寄存器, high 地址发送到高位寄存器)虽然在使用db定义时是按照01,然后02,然后03,04,05,06,07,08,这样8个独立的数据,但是可以看成4个传输过程中的话。类型数据0201、0403、0605、0807发送到寄存器,周期数相对减半。它以字为单位进行打包和传输。

问题(5):将a段和b段中的数据依次相加, 将结果存到c段中

因为《汇编语言》,这本书讲的是8086 CPU,而8086CPU的寄存器是为了保存16位数据,在之前的实验和练习中,基本上我脑子里的想法就是用文字来传输默认数据。问题(5)突然使用了db关键字,这让我有点困惑。

add bx,2 到底发生了什么?

假设cs:代码

一段

dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0chH,0Eh,0fH,0ffH

结束

b段

深度0,0,0,0,0,0,0,0

b 结束

代码段

start: mov ax,a

mov ds,ax

移动斧头,b

移动SS,斧头

移动速度,10小时

移动bx,0

莫夫CX,8

s: 推[bx]

添加bx,2

循环

移动斧头,4c00H

整数21H

实验5:编写与调试多段汇编语言程序的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、实验5:编写与调试多段汇编语言程序的信息别忘了在本站进行查找哦。

用户评论

泡泡龙

我还在跟着这个教程学汇编语言呢!第五个实验终于来啦,期待挑战。

    有16位网友表示赞同!

限量版女汉子

听说写出包含多个段落的汇编程序挺烧脑的,需要好好琢磨一下逻辑关系。

    有6位网友表示赞同!

夜晟洛

以前只写过简单的汇编程序,几个段落一起搞起来感觉难度系数飙升!

    有8位网友表示赞同!

珠穆郎马疯@

调试程序总是一件令人头疼的事,尤其是多段程序,得仔细检查每个跳转和指令。

    有13位网友表示赞同!

幸好是你

希望这个实验能让我更好地理解汇编语言中不同代码段的作用。

    有16位网友表示赞同!

陌上花

学习汇编语言就是要不断练习,多做几个实验才能越玩越好。

    有18位网友表示赞同!

我要变勇敢℅℅

编程总是要循序渐进的,从简单的再到复杂的,享受学习的过程吧!

    有13位网友表示赞同!

岁岁年年

感觉这个实验很适合回顾一下汇编语言的基础知识,比如段、指令和寄存器的概念。

    有9位网友表示赞同!

无望的后半生

汇编真是个神奇的语言,能够直接操作硬件,效率很高啊!

    有13位网友表示赞同!

你是梦遥不可及

期待这次实验能让我进一步了解汇编语言的应用,例如系统编程等领域。

    有7位网友表示赞同!

有你,很幸福

多段程序调试需要一套完整的思维框架,才能避免陷入冗长的循环。

    有12位网友表示赞同!

金橙橙。-

希望实验室有相关的教程和讲解视频,可以更好地理解实验内容。

    有16位网友表示赞同!

来自火星球的我

学习汇编语言对以后的软件开发很有帮助,能让我们更深入地理解底层原理。

    有10位网友表示赞同!

汐颜兮梦ヘ

每个实验都是一个小小的挑战,只要努力坚持,就能不断提升自己!

    有9位网友表示赞同!

回到你身边

这个实验让我重新认识到程序的设计和组织的重要性。

    有19位网友表示赞同!

青墨断笺み

汇编语言看似复杂,但是掌握了其中的精髓反而会发现它很有乐趣。

    有6位网友表示赞同!

眷恋

期待这个实验能让我收获新的知识和技能,并提升我的编程能力。

    有12位网友表示赞同!

笑傲苍穹

学习汇编语言是一个很好的锻炼,能够培养逻辑思维和解决问题的能力。

    有16位网友表示赞同!

?亡梦爱人

希望我能顺利完成这个实验,并把汇编语言的知识应用到实践中去!

    有18位网友表示赞同!

【实验5:编写与调试多段汇编语言程序】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活

上一篇:深度解析:Rust编程语言入门指南(第一部分) 下一篇:深入解析:Linux操作系统中进程的基本操作