王爽汇编语言实验4【bx】与loop的使用
本帖最后由 zjhwasd 于 2013-12-10 20:26 编辑我给大家附上图片,然后把答案也附上答案真的让人费解,小弟不懂,所以特发此贴求解释,真心谢谢各位了 不懂啊 还有不懂得一点是 cx为17他和后面s 后面的代码就没有什么关系啊, 为什么还要写出来 mov cx 17h 实在是不懂,希望大牛可以解答下这个疑问。 1、mov ax,cs
mov ds,ax
这句是将当前CS段地址复制给DS,也就是让数据段的指向代码段作为复制的源数据,为什么呢,因为题目要求是复制代码段的数据
2、mov cx,17h
如果我没猜错的话,这个17H就是从代码入口处(这里没指名程序入口,代码段开始mov ax,cs默认程序入口)到loop s结束的指令长度 ~逆天~ 发表于 2013-12-11 09:37 static/image/common/back.gif
1、mov ax,cs
mov ds,ax
这句是将当前CS段地址复制给DS,也就是让数据段的指向代码段作为复制的源数 ...
2、mov cx,17h
如果我没猜错的话,这个17H就是从代码入口处(这里没指名程序入口,代码段开始mov ax,cs默认程序入口)到loop s结束的指令长度
第一个题的答案我看懂了, 至于第二个问题,我还有点疑问,cx 这个寄存器起的什么作用 他有什么用呢?
程序的入口处是 cs:ip 那么代码的入口处 应该怎么表示?总感觉cx 这个就没什么用
zjhwasd 发表于 2013-12-11 17:50 static/image/common/back.gif
2、mov cx,17h
如果我没猜错的话,这个17H就是从代码入口处(这里没指名程序入口,代码段开始mov ax,cs默 ...
程序入口处=代码入口处,这两个是一个意思,不等于代码开始处,指定程序入口使用end 标号,标号在哪里,CS,IP就定位到哪里,从那里开始执行。CX肯定是有用的,它是控制LOOP循环次数的。
mov cx 数字
...
...
loop s
mov cx 数字的内容就是循环几次嘛
刚才看的时候突然也给忘了还想了好一会
LOOP指令 就是先将cx减1,然后再判断cx是否为0
如果为0 就跳出循环 T_未命名 发表于 2013-12-12 11:38 static/image/common/back.gif
mov cx 数字
...
...
这个我懂 可是就是不知道17 是怎么来的 zjhwasd 发表于 2013-12-11 17:50 static/image/common/back.gif
2、mov cx,17h
如果我没猜错的话,这个17H就是从代码入口处(这里没指名程序入口,代码段开始mov ax,cs默 ...
你说的 大部分是懂了17h 是怎么来的?怎么计算的?有没有公式? 本帖最后由 dancene 于 2013-12-12 18:30 编辑
17H,
是mov ax,4c00h 前代码占的空间大小,
一共23个字节。。换成16进制就是17H
想知道怎么算的, debug 你的程序,
然后用u命令查看 dancene 发表于 2013-12-12 18:24 static/image/common/back.gif
17H,
是mov ax,4c00h 前代码占的空间大小,
一共23个字节。。换成16进制就是17H
你怎么知道是23个字节呢?还有救是 mov ax,4c00h 前代码占得空间怎么计算 求教 zjhwasd 发表于 2013-12-12 19:35 static/image/common/back.gif
你怎么知道是23个字节呢?还有救是 mov ax,4c00h 前代码占得空间怎么计算 求教
为什么我数了半天都是24.... T_未命名 发表于 2013-12-12 22:31 static/image/common/back.gif
为什么我数了半天都是24....
起码应该是个偶数字节吧 ds不可以直接赋值,所以要用AX来做中转。 无名侠 发表于 2013-12-14 08:55 static/image/common/back.gif
ds不可以直接赋值,所以要用AX来做中转。
这个我是知道的,我的问题在图上呢。 二货,不错啊,都看到中断了,既然被我看到你了,就简单跟你说下
assume cs:code
code segment
mov ax,cx ;段寄存器赋值,要通过通用寄存器中转
mov dx,ax ;这里是把代码段的地址给了数据段寄存器
mov ax,0020h
mov es,ax ;0:200其实就是 20:0 这里es当做20:0处的段地址es是段寄存器,ax中转一下
mov bx,0 ;偏移从0开始,也就是ds:0换句话说 也是cs:0
mov cx,17h ;为什么是0x17,因为mov ax,4c00h上面的机器码总共占了0x17个字节
s: mov al, ;从20:0处开始赋值了,因为bx默认段寄存器是ds
mov es:,al ;传递字节传递给20:0
inc bx ;下一个字节
loop s ;一直循环 知道cx为0
mov ax,4c00h
int 21h
code ends
end
17h表示需要复制的指令字节数从cs:0开始算,到cs:17h为止
s到loop s表示循环拷贝17h次把指令一个字节一个字节的复制过去
cx控制的是循环次数,这个不明白可以看下小甲鱼的视频 1236 发表于 2013-12-17 00:48 static/image/common/back.gif
二货,不错啊,都看到中断了,既然被我看到你了,就简单跟你说下
寸芒兄弟来了,谢谢指导,完全懂了。哈哈 谢谢了。我会继续努力的。 你的这个id 还真不好找你。 T_未命名 发表于 2013-12-12 22:31 static/image/common/back.gif
为什么我数了半天都是24....
如果是18H的话,那你第一个空写的是mov ax,code 谢谢楼主分享 完全懂了。哈哈 xxx学习学习再学习
页:
[1]
2