5 包含多个段的程序
admin
2024-03-19 19:59:30
0

包含多个段的程序

1 LOOP指令

1.1命令格式

loop 指令的格式是: loop 标号, CPU 执行loop 指令的时候,要进行两步操作,①(cx)=(cx) - 1 :②判断ex 中的值,不为零则转至标号处执行程序,如果为零则向下执行。

assume cs:code
code segmentmov ax,2mov cx,11s:add ax,axloop smov ax,4c00hint 21h
code ends
end
  1. 执行mov cx,l l , 设置(cx)= l l;
  2. 执行add ax,ax(第1 次);
  3. 执行loops 将(ex)减1, (cx)=lO, (ex)不为0,所以转至s 处;
  4. 执行add ax,ax(第2 次):
  5. 执行loop s 将(ex)减l, (cx)=9, (ex)不为0,所以转至s 处:
  6. 执行add ax,ax(第3 次);
  7. 执行loops 将(ex)减1, ( cx)=8, (ex)不为0,所以转至s 处:
  8. 执行add ax,ax(第4 次):
  9. 执行loop s 将(ex)减1, (cx)=7, (ex)不为0,所以转至s 处:
  10. 执行add ax,ax(第5 次):
  11. 执行loop s 将(ex)减1, (cx)=6, (ex)不为0,所以转至s 处:
  12. 执行add ax,ax(第6 次):
  13. 执行loop s 将(ex)减1, (ex)斗,(ex)不为0,所以转至s 处:
  14. 执行add ax,ax(第7 次):
  15. 执行loop s 将(ex)减I, (ex)斗,(ex)不为0,所以转至s 处:
  16. 执行add ax,ax(第8 次):
  17. 执行loop s 将(ex)减1, (cx)=3, (ex)不为0,所以转至s 处:
  18. 执行add ax,ax(第9 次):
  19. 执行loop s 将(ex)减1, (ex)弓,(ex)不为0,所以转至s 处:
  20. 执行add ax,ax(第10 次);
  21. 执行loop s 将(ex)减1, (cx)=l, (ex)不为0,所以转至s 处;
  22. 执行add ax,ax(第l l 次):
  23. 执行loop s 将(ex) 减J, ( cx)=O, (ex)为0,所以向下执行。(结束循环)

2 debug跟踪LOOP指令

g命令可以执行循环之前的所有指令,跳转到循环指令

p命令可以直接结束循环

2.1 debug与编译命令的不同

在debug中的编程实现:

mov ax, 2000
mov ds,ax
mov al, [OJ
mov bl, [1]
mov cl, [2]
mov dl, [3]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R0gFjEJQ-1670244890097)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221205202318024.png)]

在源代码中的实现:

assume cs:code
code segment
mov ax, 2000h
mov ds, ax
mov al, [OJ
mov bl, [1]
mov cl, [2]
mov dl, [3]
mov ax , 4c00h
int 21h
code ends
end

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zxUpwn5d-1670244890098)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221205202431543.png)]

Debug 和编译器masm 对形如“ movax,[0]”这类指令在解释上的不同。我们在Debug 中和源程序中写入同样形式的指令:“ mov al,[O]”、“ mov bl,[l ]”、“ mov cl,[2]”、“ mov dl,[3]”,但Debug 和编译器对这些指令中的“[idata]”却有不同的解释。Debug 将它解释为"[idata]”是一个内存单元,“ idata ”是内存单元的偏移地址;而编译器将"[idata]”解释为" idata

要在“[]”的前面显式地给出段地址所在的段寄存器。比如我们可以这样访问2000:0 单元:mov al,ds:[0]

3 数据段

dw 即“ define word ” 。在这里,使用dw 定义了8 个字型数据(数据之间以逗号分隔),它们所占的内存空间的大小为16 个字节。

程序在运行的时候cs 中存放代码段的段地址,所以可以从cs 中得到它们的段地址。因为用dw 定义的数据处于代码段的最开始,所以偏移地址为0,这8 个数据就在代码段的偏移0 、2 、4、6 、8 、A 、C 、E 处。程序运行时,它们的地址就是CS:O 、CS:2 、cs 炜、CS:6 、CS:8 、CS:A 、CS:C 、CS:E 。

end 除了通知编译器程序结束外,还可以通知编译器程序的入口在什么地方。在程序6.2 中我们用end指令指明了程序的入口在标号sta口处,也就是说, “ movbx 。”是程序的第一条指令。

assume cs:code
code segment数据
start;代码
code ends
end start

4 栈段

assume cs:codesg
codesg segment
dw 0123h,0456h,0789h,Oabch,Odefh,Ofedh , Ocbah,0987h
dW 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
;用dw 定义16 个字型数据,在程序加载后,将取得16 个字的
; 内存空间,存放这16 个数据。在后面的程序中将这段
;空间当作钱来使用
start:mov ax,cs
mov ss,ax
mov sp,30h
;将设置枝顶ss:sp 指向cs:30
mov bx,O
mov cx,8
s: push cs: [bx]
add bx , 2
loop s ;以上将代码段。~ 15 单元中的8 个字型数据依次入战
mov bx,O
mov cx,8
sO: pop cs : [bx]
add bx,2
loop sO ;以上依次出钱8 个字型数据到代码段0~ 15 单元中
mov ax,4c00h
int 2lh
codesg ends
end start 

将代码段、数据段、栈段分开放置如下:

assume cs:b,ds:a,ss:ca segmentdw 0123h, 0456h,0789h,Oabch,Odefh,Ofedh,0cbah,0987h
a endsc segmentdw 0,0,0 , 0,0,0,0,0,0,0,0,0,0,0,0,0
c endsb segemnt
d:  mov ax,cmov ss,axmov sp,20h     ;希望用c 段当作钱空间,设置ss:sp 指向c:20mov ax,amov ds,ax      ;希望用d s :bx 访问a 段中的数据, ds 指向a 段mov bx,0mov cx,8s:push [bx]      ;以上将a 段中的0 ~ 15 单元中的8 个字型数据依次入技add bx,2loop s	mov bx,0mov cx,8s0:pop [bx]       ;以上依次出战8 个字型数据到a 段的0 ~ 15 单元中add bx,2loop s0mov ax,ac00hint 21h
b ends
end d               ;d 处是要执行的第一条指令,即程序的入口cx,8s0:pop [bx]       ;以上依次出战8 个字型数据到a 段的0 ~ 15 单元中add bx,2loop s0mov ax,ac00hint 21h
b ends
end d               ;d 处是要执行的第一条指令,即程序的入口

相关内容

热门资讯

怎么解除订阅安卓系统,安卓系统... 你是不是也和我一样,手机里订阅了好多服务,结果现在想解除订阅,却一头雾水?别急,今天就来手把手教你如...
安卓系统停用怎么开启,轻松恢复... 亲爱的手机控们,你是否曾经遇到过安卓系统突然停用的情况,让你手忙脚乱,不知所措?别担心,今天就来教你...
安卓系统电池健康度,电池健康度... 你有没有发现,你的安卓手机最近是不是有点儿不给力了?电池续航能力大不如前,充电速度也慢了不少?别急,...
安卓系统按键怎么截图,安卓系统... 你是不是也和我一样,有时候想截个图分享给朋友,却发现安卓手机的截图功能有点神秘呢?别急,今天就来手把...
购票系统安卓源代码,架构设计与... 你有没有想过,那些我们每天离不开的购票系统,它们背后的秘密是什么呢?今天,就让我带你一探究竟,揭开购...
安卓手机系统后台测试,深度解析... 你有没有发现,你的安卓手机后台总是悄悄地忙碌着?别小看了这些后台程序,它们可是手机系统稳定运行的关键...
安卓系统重启的图标,解锁设备新... 手机突然重启,是不是心里有点慌?别急,今天就来和你聊聊安卓系统重启的图标,让你一眼就能认出它,再也不...
车载智慧屏安卓系统,智能出行新... 你有没有发现,现在的车载智慧屏越来越智能了?尤其是那些搭载了安卓系统的,简直就像是个移动的小电脑,不...
安卓系统连上网权限,解锁设备无... 你有没有发现,你的安卓手机里有些应用总是偷偷连上网?别小看这个小小的网络权限,它可是能影响你隐私、消...
安卓谷歌操作系统,探索安卓谷歌... 你知道吗?在智能手机的世界里,有一个操作系统可是无人不知、无人不晓,那就是安卓谷歌操作系统。它就像一...
安卓系统手写%怎样调出,具体实... 你有没有遇到过这种情况:在使用安卓手机的时候,突然想用手写输入法来记录一些灵感或者重要信息,可是怎么...
安卓手机重置 系统设置,轻松恢... 手机用久了是不是感觉卡顿得厉害?别急,今天就来教你怎么给安卓手机来个大变身——重置系统设置!想象你的...
win如何安装安卓系统,Win... 哇,你有没有想过,让你的Win系统也能玩转安卓应用?没错,就是那种在手机上轻松自如的安卓系统,现在也...
苹果qq和安卓系统,跨平台体验... 你有没有发现,现在手机市场上,苹果和安卓的较量可是越来越激烈了呢!咱们就来聊聊这个话题,看看苹果QQ...
显示最好的安卓系统,探索最新旗... 你有没有想过,为什么安卓系统那么受欢迎呢?它就像一个魔法盒子,里面装满了各种神奇的魔法。今天,就让我...
安卓app怎么降级系统,系统版... 你有没有发现,有时候安卓手机的系统更新后,新功能虽然炫酷,但老系统用起来更顺手呢?别急,今天就来教你...
雷军脱离安卓系统,引领科技变革... 你知道吗?最近科技圈可是炸开了锅,因为我们的雷军大大竟然宣布要脱离安卓系统,这可真是让人大跌眼镜啊!...
安卓系统自动开网络,安卓系统自... 你有没有发现,手机里的安卓系统有时候会自动开启网络连接,这可真是让人又爱又恨啊!有时候,你正专心致志...
安卓系统怎样控制后台,因为服务... 手机里的安卓系统是不是感觉越来越卡了?后台程序太多,不仅耗电还影响性能。别急,今天就来教你怎么巧妙地...
安卓系统打游戏推荐,一触即达! 你有没有发现,现在手机游戏越来越好玩了?不管是休闲小游戏还是大型MMORPG,都能在手机上畅玩。但是...