鱼C论坛

 找回密码
 立即注册
查看: 9296|回复: 23

王爽汇编语言实验4【bx】与loop的使用

[复制链接]
发表于 2013-12-10 20:10:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zjhwasd 于 2013-12-10 20:26 编辑

我给大家附上图片,然后把答案也附上  答案真的让人费解,小弟不懂,所以特发此贴求解释,真心谢谢各位了 不懂啊 还有不懂得一点是 cx为17  他和后面  s 后面的代码就没有什么关系啊, 为什么还要写出来 mov cx 17h 实在是不懂,希望大牛可以解答下这个疑问。

问题图片

问题图片

汇编语言_第二版_王爽_课后习题答案.rar

109.24 KB, 下载次数: 69

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-11 09:37:44 | 显示全部楼层
1、mov ax,cs
      mov ds,ax
这句是将当前CS段地址复制给DS,也就是让数据段的指向代码段作为复制的源数据,为什么呢,因为题目要求是复制代码段的数据
2、mov cx,17h
如果我没猜错的话,这个17H就是从代码入口处(这里没指名程序入口,代码段开始mov ax,cs默认程序入口)到loop s结束的指令长度
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-11 17:50:23 | 显示全部楼层

2、mov cx,17h
如果我没猜错的话,这个17H就是从代码入口处(这里没指名程序入口,代码段开始mov ax,cs默认程序入口)到loop s结束的指令长度

第一个题的答案我看懂了, 至于第二个问题,我还有点疑问,cx 这个寄存器起的什么作用 他有什么用呢?


程序的入口处是 cs:ip   那么代码的入口处 应该怎么表示?总感觉cx 这个就没什么用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-12 10:25:36 | 显示全部楼层
zjhwasd 发表于 2013-12-11 17:50
2、mov cx,17h
如果我没猜错的话,这个17H就是从代码入口处(这里没指名程序入口,代码段开始mov ax,cs默 ...

程序入口处=代码入口处,这两个是一个意思,不等于代码开始处,指定程序入口使用end 标号,标号在哪里,CS,IP就定位到哪里,从那里开始执行。CX肯定是有用的,它是控制LOOP循环次数的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-12 11:38:12 | 显示全部楼层
mov cx 数字
...
...
loop s

mov cx 数字的内容就是循环几次嘛
刚才看的时候突然也给忘了还想了好一会
LOOP指令 就是先将cx减1,然后再判断cx是否为0
如果为0 就跳出循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-12 18:09:09 | 显示全部楼层
T_未命名 发表于 2013-12-12 11:38
mov cx 数字
...
...

这个我懂 可是就是不知道17 是怎么来的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-12 18:10:26 | 显示全部楼层
zjhwasd 发表于 2013-12-11 17:50
2、mov cx,17h
如果我没猜错的话,这个17H就是从代码入口处(这里没指名程序入口,代码段开始mov ax,cs默 ...

你说的 大部分是懂了  17h 是怎么来的?怎么计算的?有没有公式?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-12 18:24:56 | 显示全部楼层
本帖最后由 dancene 于 2013-12-12 18:30 编辑

17H,
是mov ax,4c00h 前代码占的空间大小,
一共23个字节。。换成16进制就是17H
想知道怎么算的, debug 你的程序,
然后用u命令查看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-12 19:35:31 | 显示全部楼层
dancene 发表于 2013-12-12 18:24
17H,
是mov ax,4c00h 前代码占的空间大小,
一共23个字节。。换成16进制就是17H

你怎么知道是23个字节呢?  还有救是 mov ax,4c00h 前代码占得空间怎么计算 求教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-12 22:31:35 | 显示全部楼层
zjhwasd 发表于 2013-12-12 19:35
你怎么知道是23个字节呢?  还有救是 mov ax,4c00h 前代码占得空间怎么计算 求教

为什么我数了半天都是24....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-13 19:31:19 | 显示全部楼层
T_未命名 发表于 2013-12-12 22:31
为什么我数了半天都是24....

起码应该是个偶数字节吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-14 08:55:12 | 显示全部楼层
ds不可以直接赋值,所以要用AX来做中转。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-16 16:55:25 | 显示全部楼层
无名侠 发表于 2013-12-14 08:55
ds不可以直接赋值,所以要用AX来做中转。

这个我是知道的,我的问题在图上呢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-17 00:48:46 | 显示全部楼层
二货,不错啊,都看到中断了,既然被我看到你了,就简单跟你说下

  1. assume cs:code

  2. code segment
  3.         mov ax,cx          ;段寄存器赋值,要通过通用寄存器中转
  4.         mov dx,ax                ;这里是把代码段的地址给了数据段寄存器
  5.         mov ax,0020h
  6.         mov es,ax                ;0:200其实就是 20:0   这里es当做20:0处的段地址  es是段寄存器,ax中转一下
  7.         mov bx,0           ;偏移从0开始,也就是ds:0  换句话说 也是cs:0
  8.         mov cx,17h        ;为什么是0x17,因为mov ax,4c00h上面的机器码总共占了0x17个字节
  9. s:        mov al,[bx]        ;从20:0处开始赋值了,因为bx默认段寄存器是ds
  10.         mov es:[bx],al        ;传递字节  传递给20:0   
  11.         inc bx               ;下一个字节
  12.         loop s              ;一直循环   知道cx为0
  13.         mov ax,4c00h
  14.         int 21h
  15.        

  16. code ends
  17. end
复制代码
1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2013-12-17 09:07:22 | 显示全部楼层
17h表示需要复制的指令字节数  从cs:0开始算,到cs:17h为止
s到loop s  表示循环拷贝17h次把指令一个字节一个字节的复制过去
cx控制的是循环次数,这个不明白可以看下小甲鱼的视频
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-17 18:38:20 | 显示全部楼层
1236 发表于 2013-12-17 00:48
二货,不错啊,都看到中断了,既然被我看到你了,就简单跟你说下

寸芒兄弟来了,谢谢指导,完全懂了。哈哈 谢谢了。我会继续努力的。 你的这个id 还真不好找你。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-18 03:45:22 | 显示全部楼层
T_未命名 发表于 2013-12-12 22:31
为什么我数了半天都是24....

如果是18H的话,那你第一个空写的是  mov ax,code
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-18 10:53:59 | 显示全部楼层
谢谢楼主分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-18 13:48:17 | 显示全部楼层
完全懂了。哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-28 17:16:42 | 显示全部楼层
xxx学习学习再学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 14:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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