首页
社区
课程
招聘
新学汇编,请教一个试验的问题
2006-2-10 10:44 8596

新学汇编,请教一个试验的问题

2006-2-10 10:44
8596
试验[bx]和loop的使用
使用9条指令(这9条指令包含mov ax,4c00h和int 21h)编写一个向内存0:200-0:23F依次传送数据0-63(3FH)。

我搞了半天也是12条指令,请教各位大哥,能不能帮我详细讲解一下,如何使用9条指令完成呀?

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞7
打赏
分享
最新回复 (22)
雪    币: 515
活跃值: (1223)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
RoBa 16 2006-2-10 11:59
2
0
这样行不行
xor ax,ax
mov ds,ax
xor bx,bx
mov cx,64
la: mov byte ptr 200h[bx],bl
inc bx
loop la
mov ax,4c00h
int 21h
雪    币: 229
活跃值: (168)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
hangj 3 2006-2-10 13:26
3
0
xor bx,bx
   mov ds,bx
   mov cx,64
la:mov [bx+23fh],cl
   dec bx
   loop la
   mov ax,4c00h
   int 21h
雪    币: 207
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Kven 2006-2-10 13:34
4
0
大哥,我还没学过xor和la这两个指令呀。
只会用mov和inc、loop指令呀。
下边是我上午写的程序,还没编译,也没调试呢,希望大哥们给指导指导。

assume cs:code
code segment
     mov ax,0000h
     mov ds,ax
     mov bx,200h
     mov es,ax
     mov bx,0
     mov cx,64
s:   mov dl,[bx]
     mov es:[bx],dl
     inc bx
     loop s
   mov ax,4c00h
   int 21
code ends
end
雪    币: 207
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Kven 2006-2-10 13:36
5
0
希望大哥们给予指导。
雪    币: 291
活跃值: (208)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
thebutterfly 5 2006-2-11 14:46
6
0
xor ax, ax
等价于
mov ax, 0
不过xor指令影响标志寄存器,mov不影响

la不是指令, 是标号

2楼3楼的程序已经很好了

想要编译调试?
ML /c /omf /Zi /cp xxx.asm
如果你下载的是MASM32, 需要另外下载一个16位的LINK程序才可以连接
LINK xxx.obj
雪    币: 207
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Kven 2006-2-11 22:37
7
0
谢谢thebutterfly大哥。
我用的是一个windows集成的MAS编译器,对16位的源程序直接可以编译的。
是不是la跟s的作用差不多呀?
雪    币: 207
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Kven 2006-2-11 23:00
8
0
谢谢三位大哥,我对比了一下,把代码改成:
assume cs:code
code segment
     mov ax,0
     mov ds,ax
     mov bx,0
     mov cx,64
s:   mov [bx],ax
     inc bx
     loop s
   mov ax,4c00h
   int 21
code ends
end

这样做正确吗?
雪    币: 291
活跃值: (208)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
thebutterfly 5 2006-2-12 01:51
9
0
看不懂做什么
怎么没见你向内存写东西啊?
那个循环只是把es:[0]的内容反复读入ax, 读入ax之后又没见做了什么处理...而且似乎es也没有初始化

mov dest, src
作用:把src的内容送入dest
雪    币: 207
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Kven 2006-2-12 12:47
10
0
好像要写个段前缀,可是我不知道怎么写。
大哥能否指点指点?
雪    币: 212
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
aboil 2006-2-12 13:32
11
0
3楼和2楼程序正确,不过看来3楼更强些,2楼多用了一个寄存器
xor ax,ax
mov ds,ax
xor bx,bx
这三句合成二句就好了.
xor bx,bx
mov ds,bx
楼主修改后的程序完全变得面目全非
mov ax,es:[0] 这句除了看看外,对程序目标没起来任何作用
段前缀是这样写的,不过你看2楼和3楼都没用到段前缀呀
雪    币: 515
活跃值: (1223)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
RoBa 16 2006-2-12 18:14
12
0
对于[bx],默认的段前缀就是ds,当然写成ds:[bx]也可以。
雪    币: 207
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Kven 2006-2-12 18:45
13
0
谢谢各位大哥。
按照RoBa大哥的说法,我刚才又翻看了一下[bx]和loop的联合用法。
这个试验是让做[bx]和loop的使用的。
而且,我看的汇编教材里边还没教到使用xor指令的。
这两天一直在翻看[bx]和loop用法这一章节,可是我想破头都不会使用9条指令完成呀。
大哥们,指点指点小弟。
雪    币: 207
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Kven 2006-2-13 10:49
14
0
我现在不明白RoBa大哥写的那句
la: mov byte ptr 200h[bx],bl
是什么意思?

还有hangj大哥的那句
la:mov [bx+23fh],cl
dec bx
是什么意思呀?
雪    币: 515
活跃值: (1223)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
RoBa 16 2006-2-13 12:44
15
0
你看的是什么书?应该有介绍“寻址方式”的内容的吧,好好看看那里。
雪    币: 207
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Kven 2006-2-13 13:43
16
0
我看的是清华大学出版社王爽著的《汇编语言》。
现在这个试验是第五章的。
前5章节的内容没有讲寻址方式呀。
5555
我又改了一下,麻烦帮我看看:

assume cs:code
code segment
   mov ax,0
   mov ds,ax
   mov bx,200h
   mov cx,64
  s:mov [bx],ax
    inc bx
    inc al
   loop s
  mov ax,4c00h
  int 21h
code ends
end
雪    币: 515
活跃值: (1223)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
RoBa 16 2006-2-13 14:04
17
0
这次总算像个样子了,把s: mov [bx],ax里面ax改成al应该就对了
雪    币: 207
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Kven 2006-2-13 14:08
18
0
谢谢RoBa大哥,我为这个题折腾了3天了。
可是,还不能达到9条指令的要求呀。
555555

难道我的能力只能做到这样吗?好苦恼呀。
在这种入门阶段里煎熬,好难受呀。
雪    币: 238
活跃值: (326)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
gzgzlxg 11 2006-2-13 21:00
19
0
mov ax, 0
    mov bx, ax
    mov ds, ax
    mov cx, 64
la: mov [bx + 200h], bl
    inc bx
    loop la
    mov ax, 4c00h
    int 21h
这个王爽怎么会出这种题目, 0:200h 到 0:23Fh 是中断80h 往后的中断向量表, 这个程序运行了不等于自杀, 晕.
就算教别人学汇编,也该出一点有实际用途的程序.
Kven 也不用伤心,现在的计算机速度够快,多一句少一句没有太大的关系,不必放在心上.
雪    币: 207
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Kven 2006-2-14 09:21
20
0
谢谢 gzgzlxg 大哥,
现在初学阶段,试验课程做的好坏,直接证明对本章节和前边章节学习的好坏,看来我要好好再翻翻前边的课程了。
如果我自己对自己都不负责任,那我还是放弃这种自学算了。
所以,我要好好学习这些基础性的东西呀。
雪    币: 212
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
aboil 2006-2-14 09:51
21
0
先好好琢磨下2楼和3楼的程序你就知道了
雪    币: 207
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Kven 2006-2-14 16:08
22
0
截至到今天才把问题解决。
第五章的问题,我到了第七章的学习中,才学到[bx+idata]。
谢谢各位大哥。

assume cs:code
code segment
mov ax,0
mov ds,ax
mov bx,0
mov cx,64
s:mov [bx+200h],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
雪    币: 254
活跃值: (126)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
heXer 3 2006-2-15 13:29
23
0
最初由 hangj 发布
xor bx,bx
mov ds,bx
mov cx,64
la:mov [bx+23fh],cl
dec bx
........


这个错了吧
你放的是1~64,题目要求是0~63
游客
登录 | 注册 方可回帖
返回