|
主题 : : 实验题4 (2)不用9条指令,只用8条的做法。。。因为我不会做9条的。。。 [待解决] |
回复[ 143次 ]
点击[ 4468次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2008-08-11 20:10 ]
[引用]
[回复]
[ top ] | |
荣誉值:4
信誉值:3
注册日期:2008-06-22 20:23 |
assume cs:abc
abc segment
mov ax,0200h
mov ds,ax
mov cx,64
s:mov bx,cx
mov [bx],bl
loop s
mov ax,4c00h
int 21h
abc ends
end
我只会做8条指令的。。。 | | |
|
|
|
|
[第1楼]
[ 回复时间:2008-08-11 20:17 ]
[引用]
[回复]
[ top ] | |
荣誉值:4
信誉值:3
注册日期:2008-06-22 20:23 |
|
|
|
|
|
[第2楼]
[ 回复时间:2008-08-19 12:08 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-08-19 12:07 |
晕 我做出来也是8条指令 以为自己做错了~~
原来是对的。。。 | | |
|
|
|
|
[第3楼]
[ 回复时间:2008-08-19 12:43 ]
[引用]
[回复]
[ top ] | |
荣誉值:337
信誉值:0
注册日期:2008-01-01 17:48 |
很厉害,我都没有想过这个方法,确实很不错。
不过好像有点问题。题的正确与否我们自己通过debug就能验证。抛开9条指令的限制也无妨:-)
下面是这个程序的结果:
-g
Program terminated normally
-d 0:200
0000:0200 00 01 02 03 04 05 06 07-08 09 0A 0B 0C 0D 0E 0F
0000:0210 10 11 12 13 14 15 16 17-18 19 1A 1B 1C 1D 1E 1F
0000:0220 20 21 22 23 24 25 26 27-28 29 2A 2B 2C 2D 2E 2F
0000:0230 30 31 32 33 34 35 36 37-38 39 3A 3B 3C 3D 3E 3F
0000:0240 40 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
--------------------
我们可以看到0000:0240被更改了,而0000:0200没有更改(见loop指令的操作),由于开始默认的是0,所以正好符合题意,反之如果其默认的不是0! | | |
|
|
|
|
[第4楼]
[ 回复时间:2008-08-21 09:26 ]
[引用]
[回复]
[ top ] | |
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34 |
|
|
|
|
|
[第5楼]
[ 回复时间:2008-09-03 14:44 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-03-21 10:47 |
我的程序如下:
assume cs:codesg
codesg segment
start: mov ax,0020h
mov ds,ax
mov bx,0
mov cx,40h
s:mov ds:[bx],bx/bl;二选一
inc bx/bl;二选一
loop s
mov ax,4c00h
int 21h
codesg ends
end start | | |
|
|
|
|
[第6楼]
[ 回复时间:2008-09-04 10:07 ]
[引用]
[回复]
[ top ] | |
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34 |
s:mov ds:[bx],bx/bl;二选一
-------------
这个用bx会有问题,不清楚的可以自己思考下 | | |
|
|
|
|
[第7楼]
[ 回复时间:2008-09-21 09:33 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-09-17 16:50 |
楼上是说(bx)是字型数据,而([bx])要存放的是字节型数据。所以会有问题,但是实际操作中是不受这个问题影响的,因为在内存中第二个数的低8位(我们所需的数据)会将第一个数的高8位(就是00)覆盖掉,正好也符合也题意的存放形式。
但是楼主这样做会有个问题就是,将这段内存的第64位改了,而第1位没改,只是原来就是0而已。
不过楼主的思路还是正确的,只是在传送数据之前将(bx)再减去一位就对了!
我也是初学,不知说的是否正确? | | |
|
|
|
|
[第8楼]
[ 回复时间:2008-09-28 02:20 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-09-21 15:29 |
assume cs:abc
abc segment
mov ax,0200h
mov ds,ax
mov cx,64
s:mov bx,cx
mov [bx],bl
sub bx,1 加条指令,不知道对不对。
loop s
mov ax,4c00h
int 21h
abc ends
end | | |
|
|
|
|
[第9楼]
[ 回复时间:2008-10-01 02:10 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-09-26 11:36 |
|
|
|
|
|
[第10楼]
[ 回复时间:2008-10-03 11:07 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:5
注册日期:2008-08-23 12:53 |
楼主还没有初始化 bx 呢,应该要加多一条 ”mov bx,0“ 的指令吧? | | |
|
|
|
|
[第11楼]
[ 回复时间:2008-10-06 18:25 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:8
注册日期:2008-09-15 09:10 |
|
|
|
|
|
[第12楼]
[ 回复时间:2008-10-07 22:54 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-09-12 00:11 |
|
|
|
|
|
[第13楼]
[ 回复时间:2008-10-22 07:26 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-10-10 15:22 |
我是按楼主提供的程序做的,执行成功了,只是有一点没搞清楚,第一次用r命令查看时,居然显示cx=0013 不应该是0040吗??why | | |
|
|
|
|
[第14楼]
[ 回复时间:2008-11-06 16:49 ]
[引用]
[回复]
[ top ] | |
荣誉值:16
信誉值:0
注册日期:2008-11-03 20:39 |
楼主的思路不错,赞一个先~
如果按照正常的思路是从00,01,02,一个以个往里面写数据!但是楼主的程序是倒过来“40”,“3f”这样的顺序来写的!但是查看的时候0000:0200 这个位置是没有改变的,楼主的运气好刚好0000:0200处就是“00”。实际上是因为循环程序但发现CX=0的时候就直接跳出,少执行一次mov [bx],bl ,所以0000:0200出没被改写。 | | |
|
|
|
|
[第15楼]
[ 回复时间:2008-11-24 09:33 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-11-24 08:49 |
|
|
|
|
|
[第16楼]
[ 回复时间:2008-11-24 20:48 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:2
注册日期:2008-11-24 20:37 |
|
|
|
|
|
[第17楼]
[ 回复时间:2008-11-24 21:48 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:2
注册日期:2008-11-24 20:37 |
各位哥哥看看小弟这个是不是王爽老师要的9位的程序呀
assume cs:code
code segment
mov ax,0020h
mov ds,ax
mov bx,0
mov cx,63
s:mov [bx],bx
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end | | |
|
|
|
|
[第18楼]
[ 回复时间:2008-11-26 11:32 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-11-26 10:14 |
各位哥哥看看小弟这个是不是王爽老师要的9位的程序呀
assume cs:code
code segment
mov ax,0020h
mov ds,ax
mov bx,0
mov cx,63
s:mov [bx],bx
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
------------------
回复:我也是新手,说错了不要骂啊,63十进制,还有,你根本没有理解二进制度和十六进制和编程,他是说从0开始,那也应该是64次,那也应该是3F+1=40H,看好了后面是“H“ | | |
|
|
|
|
[第19楼]
[ 回复时间:2008-11-26 17:51 ]
[引用]
[回复]
[ top ] | |
荣誉值:12
信誉值:0
注册日期:2008-11-24 18:10 |
这是我写的
assume cs: code
code segment
mov ax,0020h
mov ds,ax
mov cx,64
mov bx,0h
s: mov ds:[bx],bl
inc bl
loop s
mov ax,4c00h
int 21h
code ends
end
共9条指令
其中bx是需要初始化的,因为你并不能保证bx中的值一定是0,所以mov bx,0h还是需要的 | | |
|
|
|
|
[第20楼]
[ 回复时间:2008-12-05 13:46 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-11-20 20:14 |
|
|
|
|
|
[第21楼]
[ 回复时间:2008-12-06 18:53 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:3
注册日期:2008-11-21 14:43 |
楼主的思路不错,赞一个先~
如果按照正常的思路是从00,01,02,一个以个往里面写数据!但是楼主的程序是倒过来“40”,“3f”这样的顺序来写的!但是查看的时候0000:0200 这个位置是没有改变的,楼主的运气好刚好0000:0200处就是“00”。实际上是因为循环程序但发现CX=0的时候就直接跳出,少执行一次mov [bx],bl ,所以0000:0200出没被改写。
------------------
回复:同意楼上的说法,如果按楼主的写的话,填的值是64-1,0没有填进去,CX到0就跳出了,但题的要求是0-63,而不是1-64吧! | | |
|
|
|
|
[第22楼]
[ 回复时间:2008-12-11 11:17 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2007-11-28 19:42 |
assume cs:code
code segment
mov ax,0020h
mov ds,ax
mov bx,0
mov cx,64
s: mov [bx],bl
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end | | |
|
|
|
|
[第23楼]
[ 回复时间:2008-12-24 10:10 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:2
注册日期:2008-12-15 16:17 |
楼主这种非常的想法很好,但是细节上有问题,楼上的都说了啊。22楼是正解 | | |
|
|
|
|
[第24楼]
[ 回复时间:2009-01-05 23:29 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:8
注册日期:2008-12-17 17:52 |
想法不错,可是题目要求 "依次" 传送数据0-63(3fh) | | |
|
|
|
|
[第25楼]
[ 回复时间:2009-01-09 03:16 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:2
注册日期:2007-12-28 19:04 |
|
|
|
|
|
[第26楼]
[ 回复时间:2009-01-12 12:18 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:1
注册日期:2008-12-16 19:25 |
仅仅分析代码:
mov ax,0200h
mov ds,ax
mov cx,64
s:mov bx,cx
mov [bx],bl
loop s
mov ax,4c00h
int 21h
楼主这么想很好,不过忽略了一点
s:mov bx,cx
mov [bx],bl
loop s
这一段中前面两条指令最后一次执行是在cx=1的情况下,紧接着执行loop s的时候0=cx=cx-1,就直接跳到下一步去了。而没有对0:200内存单元进行设置。
这样既能算是你的程序是正确的,又能算不正确的。
正确在:(引用教材)"DOS方式下,一般情况,0:200~0:2ff空间中没有系统或其他程序的数据或代码",这样0:200这个内存单元可以说是默认为0的。所以你的程序忽略了对0:200单元的数据的设置某种意义以上来说是可行的。
不正确在:0:200也有可能不是0,所以如果忽略了对其进行设置,很可能导致程序运行结果不正确。例如:用debug运行你写的程序,先e 0:200 5,然后再执行程序,那结果就不正确了。
我个人倾向于你的程序是不正确的观点。同时你的程序要修改正确,那也需要再增加一条指令。具体有很多种方式。
以上:个人愚见。 | | |
|
|
|
|
[第27楼]
[ 回复时间:2009-01-16 15:39 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-01-15 17:32 |
楼主的探索还是值得肯定的.只是往0000:0240 40多写了一次,而0000:0200又没写.即写入内存的是1-64,而不是题目要求的0-63
还有(bx)不一定是0. | | |
|
|
|
|
[第28楼]
[ 回复时间:2009-02-17 21:58 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-02-16 21:42 |
少条初始化语句呀。的确不能算正确。
想想高级语言如果没有初始化一个变量就去使用,那是什么后果?
多么隐晦的BUG呀。 | | |
|
|
|
|
[第29楼]
[ 回复时间:2009-03-08 15:26 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2009-02-22 23:57 |
我的做法这样是8句 是对的吗?
assume cs:code
code segment
mov ax,0020h
mov ds,ax
mov cx,64
s: mov ds:[0],bl
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end | | |
|
|
|
|
[第30楼]
[ 回复时间:2009-03-27 11:41 ]
[引用]
[回复]
[ top ] | |
荣誉值:5
信誉值:0
注册日期:2009-03-14 22:04 |
回复:[第29楼]
------------------
bx还没初始化呢,如果不是0怎么办? | | |
|
|
|
|
[第31楼]
[ 回复时间:2009-04-23 04:32 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2007-07-31 18:57 |
楼主你的程序是错误的
程序没有给 0:200 处赋值
在 loop s 后面应该加上一句 mov ds:[0],cl
你的结果正确 是因为 0:200 处正好是 00
运气而已
因为 0:200 处也有可能不是 00 | | |
|
|
|
|
[第32楼]
[ 回复时间:2009-05-04 11:33 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-04-28 11:02 |
assume cs:code
code segment
start: mov ax,0200h
mov ds,ax
mov cx,64
s: mov bx,cx
mov byte ptr [bx-1],cl
loop s
mov ax,4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第33楼]
[ 回复时间:2009-05-09 05:17 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-05-08 06:03 |
s:mov bx,cx
mov [bx],bl
loop s
呀呀呀,一看就知道错得严重了,楼主这里不是一直都在重复在偏移地址0064写入64吗??原地踏步,都没有加
INC BX | | |
|
|
|
|
[第34楼]
[ 回复时间:2009-05-09 05:23 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-05-08 06:03 |
这里好搞笑啊,好多比我更菜的,嘻嘻
s: mov ds:[0],bl
inc bx
loop s 这代码也是原地踏步啊,一直向MOV DS:[0]写入数据啦, | | |
|
|
|
|
[第35楼]
[ 回复时间:2009-05-09 05:24 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-05-08 06:03 |
|
|
|
|
|
[第36楼]
[ 回复时间:2009-05-09 13:03 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-04-22 12:29 |
22楼的正确~~ 你做的8条指令 少了条 对 BX初始化的~~ 如果 BX不是 0 那就 写的 乱 7八糟了~~ | | |
|
|
|
|
[第37楼]
[ 回复时间:2009-05-19 14:16 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-05-13 21:46 |
想法很不错呀,这题是碰上了,但还是却一个内存单元没有写入,如果题目不是传送数据0~63,而是6~69你咋办? | | |
|
|
|
|
[第38楼]
[ 回复时间:2009-05-19 14:19 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-05-13 21:46 |
|
|
|
|
|
[第39楼]
[ 回复时间:2009-07-13 16:06 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:2
注册日期:2009-06-29 14:39 |
大家讲的有点混乱啊……
楼主这里是不用对BX初始化的,因为使用BX的第一句为mov BX,CX。
回33楼,这里用loop后CX值是会变的,相应的BX值也会变,不可能原地踏步。
个人认为26、27楼讲的有道理。楼主的程序实现的是在0020:0001~0020:0040处依次写入了1H~40H。与题目不符……
我觉得正确的应该是这样的:
assume cs:abc
abc segment
mov ax,0020h
mov ds,ax
mov cx,64
s:mov bx,cx
sub bx,1 ;这里加一句就好
mov [bx],bl
loop s
mov ax,4c00h
int 21h
abc ends
end
这样的话还是9句呢! | | |
|
|
|
|
[第40楼]
[ 回复时间:2009-07-17 17:10 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2009-07-04 17:18 |
你这个是将1-64传送到内存0:201-0:240中,和题目中的错开了 | | |
|
|
|
|
[第41楼]
[ 回复时间:2009-07-29 22:59 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2009-04-08 06:33 |
第18楼,你的程序执行完后,看似没有错误,可是你把内存 0:240 中的数据改成了 00 了 这个是很危险的操作,不知道我说得对不对?
-d 0:200
0000:0200 00 01 02 03 04 05 06 07-08 09 0A 0B 0C 0D 0E 0F
0000:0210 10 11 12 13 14 15 16 17-18 19 1A 1B 1C 1D 1E 1F
0000:0220 20 21 22 23 24 25 26 27-28 29 2A 2B 2C 2D 2E 2F
0000:0230 30 31 32 33 34 35 36 37-38 39 3A 3B 3C 3D 3E 3F
0000:0240 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 | | |
|
|
|
|
[第42楼]
[ 回复时间:2009-07-29 23:00 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2009-04-08 06:33 |
因为你用的是DX,它是的长度是一个字,而我们操作的单位是一个字节 | | |
|
|
|
|
[第43楼]
[ 回复时间:2009-08-13 13:26 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-08-08 10:04 |
我的答案
code segment
mov ax,0020h
mov ds,ax
sub bx,bx
mov cx,0040h
s:mov [bx],bl
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end | | |
|
|
|
|
[第44楼]
[ 回复时间:2009-08-13 22:30 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-05-30 10:07 |
assume cs:code
code segment
mov ax,0020h
mov ds,ax
mov bx,0
mov cx,40h
s:mov ds:[bx],bl
inc bl
loop s
mov ah,4ch
int 21h
code ends
end | | |
|
|
|
|
[第45楼]
[ 回复时间:2009-08-19 16:59 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-08-11 14:26 |
我的程序 大家指点一下
assume cs:code
code segment
mov ax,0020H
mov ds,ax
mov bx,0
mov cx,64
s:mov ds:[bx],bl
inc bx
loop s
mov ax,4c00H
int 21H
code ends
end | | |
|
|
|
|
[第46楼]
[ 回复时间:2009-08-19 17:05 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-08-11 14:26 |
后来 我又修改了一下感觉可以将cx改为63 因为在mov ax,0020H mov ds,ax mov bx,0这里00020已经被赋值为0了
assume cs:code
code segment
mov ax,0020H
mov ds,ax
mov bx,0
mov cx,63
s:mov ds:[bx],bl
inc bx
loop s
mov ax,4c00H
int 21H
code ends
end | | |
|
|
|
|
[第47楼]
[ 回复时间:2009-08-21 10:32 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-08-15 16:53 |
我是这样写的,有没有问题啊?请高手看一下:
assume cs:code
code segment
mov ax,0000H
mov ds,ax
mov bx,0200H
mov cx,64
s:mov [bx],bl
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end | | |
|
|
|
|
[第48楼]
[ 回复时间:2009-09-25 10:49 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:3
注册日期:2008-11-09 22:07 |
楼主的思路挺好的,但是这样会提前跳出循环导致,0:200单元处没有赋值,即使侥幸这是个安全区,初始化时都是0,这种做法也是不对的 | | |
|
|
|
|
[第49楼]
[ 回复时间:2009-10-08 20:41 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-10-05 23:09 |
第19楼,22楼,43楼,44楼,45楼,47楼正解.
第33楼理解有误哦.s:mov bx,cx
mov [bx],bl
loop s
这几句可没有"原地踏步"哦!很明显(bx)是随着(cx)的递减而不断递减的!这怎么能叫原地踏步呢!想想看哦!
其实楼主思路是相当创意的!问题在于没有达到题目的要求啊!按楼主的写法,第一次被送到ds:[bx](此时(bx)=(cx)=64)的数据是(cx)的值64,可是题目要求被送入的数据是0~63啊!可不包括64哦!而且当(cx)=1循环体走完后,loop就不再跳转s了,因为此时(cx)-1=0,程序直接往下走了.因而0也没有被送到内存.另外,题目要求的内存空间是0:200~0:23f,楼主的程序在执行完后用到的是0:201~0:240. | | |
|
|
|
|
[第50楼]
[ 回复时间:2009-10-14 13:49 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-10-09 19:25 |
|
|
|
|
|
[第51楼]
[ 回复时间:2009-10-15 20:37 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-08-20 08:23 |
这样好像是倒着输入的 输入的好像是64-0 而不是依次输入0-64
不过谢楼主了 这种思路解决了我下一题的思路 | | |
|
|
|
|
[第52楼]
[ 回复时间:2009-11-24 15:20 ]
[引用]
[回复]
[ top ] | |
荣誉值:3
信誉值:0
注册日期:2009-10-27 16:12 |
不可否认,楼主的思维不拘一格,很有创意
第四十九楼的正解,楼主的程序是从64复制到1,虽然不是我们要的答案,但却是我们应该学习的思维
我的答案是
mov ax,20h
mov ds,ax
mov bx,0
mov cx,40h
s:mov [bx],bl
inc bx
loop s
mov ax,4c00h
int 21h | | |
|
|
|
|
[第53楼]
[ 回复时间:2009-11-30 13:25 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-11-20 22:10 |
|
|
|
|
|
[第54楼]
[ 回复时间:2009-12-03 17:59 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-03-12 06:06 |
|
|
|
|
|
[第55楼]
[ 回复时间:2009-12-15 14:44 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2009-03-27 20:52 |
楼主,8个指令不对哈,你没有初始化bl的值,,,
应该是这样地。。。。
assume cs:abc
abc segment
mov ax,020h
mov ds,ax
mov bl,0
mov cx,64
s:mov [bl],bl
int bl
loop s
mov ax,4c00h
int 21h
abc ends
end | | |
|
|
|
|
[第56楼]
[ 回复时间:2009-12-15 14:46 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2009-03-27 20:52 |
|
|
|
|
|
[第57楼]
[ 回复时间:2010-01-02 22:58 ]
[引用]
[回复]
[ top ] | |
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51 |
|
|
|
|
|
[第58楼]
[ 回复时间:2010-01-16 17:55 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2007-12-08 14:22 |
提示你一下 你还是9条指令 如果按你那样来 不符合题目要求
s:mov bx,cx
mov [bx],bl
cx = 64 地址偏移是从0 / 63开始的 所以 mov [bx], bl 中的bx 应该 bx = bx -1 还是9条指令 | | |
|
|
|
|
[第59楼]
[ 回复时间:2010-03-17 20:37 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-03-01 21:17 |
|
|
|
|
|
[第60楼]
[ 回复时间:2010-03-24 21:32 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-03-22 11:30 |
逆向思维 加 发散思考方式,虽细节方面有瑕疵,但值得肯定!!! | | |
|
|
|
|
[第61楼]
[ 回复时间:2010-03-24 21:44 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-03-22 11:30 |
不满足于你看到了什么,而要深度思考你还看到了什么,表象背后隐藏的东西便可能浮出水面... | | |
|
|
|
|
[第62楼]
[ 回复时间:2010-04-04 13:38 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-04-03 22:07 |
你的结果是错误的!!!
你这样更改的是0:201H--0:240H,而题目要求的是0:200H--0:23FH!!!!
你用debug调一下自己看看就知道了 | | |
|
|
|
|
[第63楼]
[ 回复时间:2010-04-18 18:21 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-04-03 03:20 |
第一次执行就是错的
cx=64=40h 第一次复制的植就措勒
而且题目是让从0-63[3f]你这个还是反过来的。。。。 | | |
|
|
|
|
[第64楼]
[ 回复时间:2010-12-06 14:47 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2010-12-03 12:08 |
复制的曲间有误,题目要求0--63
LZ是循环次数为64次,64--1由于cx=0不执行,所为0200:0是不会被复制的 | | |
|
|
|
|
[第65楼]
[ 回复时间:2010-12-07 16:38 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-12-06 12:31 |
但是有点问题,题目要求是从0—63,而不是到64! | | |
|
|
|
|
[第66楼]
[ 回复时间:2010-12-08 19:41 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-11-09 20:01 |
有问题啊 题目要求是 输入0~63 不是64到1 啊 | | |
|
|
|
|
[第67楼]
[ 回复时间:2010-12-16 10:42 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2010-12-12 20:21 |
|
|
|
|
|
[第68楼]
[ 回复时间:2010-12-16 10:43 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2010-12-12 20:21 |
|
|
|
|
|
[第69楼]
[ 回复时间:2010-12-16 10:43 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2010-12-12 20:21 |
|
|
|
|
|
[第70楼]
[ 回复时间:2010-12-18 13:06 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-10-26 16:20 |
|
|
|
|
|
[第71楼]
[ 回复时间:2010-12-20 08:41 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-10-06 11:12 |
|
|
|
|
|
[第72楼]
[ 回复时间:2010-12-20 12:03 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-12-20 11:44 |
ASSUME CS:TESTFOUR
TESTFOUR SEGMENT
MOV AX,0200H
MOV DS,AX
MOV CX,40h
S: MOV BX,CX
MOV [BX],CX
SUB cx,1
LOOP S
MOV AX,4C00H
INT 21
TESTFOUR ENDS
END | | |
|
|
|
|
[第73楼]
[ 回复时间:2010-12-20 14:54 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-12-20 11:44 |
|
|
|
|
|
[第74楼]
[ 回复时间:2010-12-21 10:46 ]
[引用]
[回复]
[ top ] | |
荣誉值:8
信誉值:0
注册日期:2010-12-15 20:35 |
assume cs:mycode
mycode segment
mov ax,0020H
mov ds,ax
mov bx,0H
mov cx,3fH
s:mov [bx],bx
inc bx
loop s
mov ax,4c00H
int 21H
mycode ens
end | | |
|
|
|
|
[第75楼]
[ 回复时间:2010-12-27 21:12 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2010-10-31 08:38 |
大家讲的有点混乱啊……
楼主这里是不用对BX初始化的,因为使用BX的第一句为mov BX,CX。
回33楼,这里用loop后CX值是会变的,相应的BX值也会变,不可能原地踏步。
个人认为26、27楼讲的有道理。楼主的程序实现的是在0020:0001~0020:0040处依次写入了1H~40H。与题目不符……
我觉得正确的应该是这样的:
assume cs:abc
abc segment
mov ax,0020h
mov ds,ax
mov cx,64
s:mov bx,cx
sub bx,1 ;这里加一句就好
mov [bx],bl
loop s
mov ax,4c00h
int 21h
abc ends
end
这样的话还是9句呢!
------------------
回复:看了前面30多个的,这个应该是很好的分析。29楼的也是对的。学习了,感谢。 | | |
|
|
|
|
[第76楼]
[ 回复时间:2011-01-14 18:28 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-01-14 18:20 |
已经验证完毕!楼主的编程是错误的,先不说你的bx没有初始化0,可能会出现问题!
而你的赋值完全错误,20H:0你根本就没写入,因为loop先执行的是cx-1,你只是碰巧20h:0的数据为0罢了。不相信自己用emu8086自己在 20H:0写入其他数据验证下!
发下标准答案哈!!!!!!!!emu8086内存验证正确!
assume cs:code
code segment
mov ax,20h
mov ds,ax
mov bx,0
mov cx,40h
s: mov [bx],bl
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end | | |
|
|
|
|
[第77楼]
[ 回复时间:2011-01-26 10:43 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-06-20 14:15 |
|
|
|
|
|
[第78楼]
[ 回复时间:2011-02-19 20:15 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-12-06 13:11 |
|
|
|
|
|
[第79楼]
[ 回复时间:2011-03-21 22:47 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-02-27 22:37 |
assume cs:abc
abc segment
mov ax,0020h
mov ds,ax
mov cx,64
s:sub cx,1
mov bx,cx
mov [bx],bl
loop s
mov ax,4c00h
int 21h
abc ends
end
我认为把楼主的这样改一下就行了 | | |
|
|
|
|
[第80楼]
[ 回复时间:2011-04-04 13:08 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-04-04 12:43 |
楼主的程序我运行如下: 貌似有问题!
C:\Masm>debug 3.exe
-r
AX=0000 BX=0000 CX=0013 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B83 ES=0B83 SS=0B93 CS=0B93 IP=0000 NV UP EI PL NZ NA PO NC
0B93:0000 B80002 MOV AX,0200
-g
Program terminated normally
-d 0:200
0000:0200 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:0210 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:0220 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:0230 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:0240 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:0250 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:0260 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:0270 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
- | | |
|
|
|
|
[第81楼]
[ 回复时间:2011-04-10 23:35 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-04-05 12:00 |
|
|
|
|
|
[第82楼]
[ 回复时间:2011-04-12 14:30 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-03-31 22:33 |
郁闷 楼主的程序都有问题啊! BX没有初始化就开始赋值了???厉害无中生有!!! | | |
|
|
|
|
[第83楼]
[ 回复时间:2011-04-12 14:37 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-03-31 22:33 |
居然有这么多人夸奖 这么多人的 mov cx,64 写成了 mov cx,63 厉害啊 凶悍啊 写成这样了还在那里说看看我的程序写的咋样好不好???更有连BX初始化都没有 还有S:MOV [BX],BX 这是什么意思??? 别人是要你一个单元一个单元的进行操作 并不是一个字单元一个字单元的连续传送数据 虽然可能没错但是这种态度难道可以?》?? | | |
|
|
|
|
[第84楼]
[ 回复时间:2011-04-12 15:39 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-03-31 22:33 |
第七十九楼的程序我不知道是在做什么???s:sub cx,1减掉一个1 loop s cx又减掉一个1 那这样到头才循环了多少次??、 那结果就是这样 63 61 59 57 …… | | |
|
|
|
|
[第85楼]
[ 回复时间:2011-04-17 20:26 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-04-17 04:00 |
你好。
你复制的是1-64(40h)从0000:0201到0000:240,并没有复制0到0000:0200。因为cx=0时,程序直接就向下走了。
0000:0200为0是因为他的初始值是0.
换句话说,如果系统在0000:0200赋予的初始值不为0,那么这个程序就得不出这个结论。你可以先把0000:0200设成其他值试试。 | | |
|
|
|
|
[第86楼]
[ 回复时间:2011-04-29 11:52 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-04-29 11:13 |
不是已经mov bx,cx
为什么有人说要给BX赋初值,请赐教 | | |
|
|
|
|
[第87楼]
[ 回复时间:2011-06-02 17:54 ]
[引用]
[回复]
[ top ] | |
荣誉值:10
信誉值:6
注册日期:2011-06-01 16:20 |
我只是来交下作业。上面已经有很多人写了正确答案,就没细看了。
mov ax,20h
mov ds,ax
mov bx,0
mov cx,40h
s:mov [bx],bl
inc bx
loop s
mov ax,4c00h
int 21h | | |
|
|
|
|
[第88楼]
[ 回复时间:2011-07-03 19:31 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:2
注册日期:2010-09-17 02:05 |
assume cs:code
code segment
mov ax,0020H
mov ds,ax
mov bx,0
mov cx,64
s: inc bx
loop s
mov ax,4c00H
int 21H
code ends
end
mov [bx],bx 这样设置好像没有什么异常。。
不知道这样设置有什么不妥的吗????? 求解答。 | | |
|
|
|
|
[第89楼]
[ 回复时间:2011-07-03 19:33 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:2
注册日期:2010-09-17 02:05 |
assume cs:code
code segment
mov ax,0020H
mov ds,ax
mov bx,0
mov cx,64
s: mov [bx],bx
inc bx
loop s
mov ax,4c00H
int 21H
code ends
end
mov [bx],bx 这样设置好像没有什么异常。。
不知道这样设置有什么不妥的吗????? 求解答。
这个是完整的,刚那个掉了一句。 | | |
|
|
|
|
[第90楼]
[ 回复时间:2011-07-06 13:08 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-12-04 14:44 |
如果是考试,楼主得零分,姑且不说你聪明地用了8条指令,对照下题意,就不符合要求! | | |
|
|
|
|
[第91楼]
[ 回复时间:2011-07-29 12:02 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-07-28 19:47 |
mov [bx],bx这条指令不符合题意,因为你一下给两个字节单元赋值,题目要求是一个字节单元一个值0-63,虽然编译能通过 | | |
|
|
|
|
[第92楼]
[ 回复时间:2011-07-29 12:05 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-07-28 19:47 |
结果不对,仔细看看题吧!
这是我改进后的结果
;-----------------------------------------
;向内存0:200-0:23F依次传送数据0-63(3FH)
;2011-7-29
;-----------------------------------------
assume cs:code
code segment
start: mov bx,0
mov ds,bx
mov cx,64 ;循环次数
s: mov [0200H+bx],bl
inc bx
loop s
mov ax,4c00H
int 21H
code ends
end start | | |
|
|
|
|
[第93楼]
[ 回复时间:2011-07-29 12:06 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-07-28 19:47 |
回复:[第89楼]
------------------
mov [bx],bx这条指令不符合题意,因为你一下给两个字节单元赋值,题目要求是一个字节单元一个值0-63,虽然编译能通过 | | |
|
|
|
|
[第94楼]
[ 回复时间:2011-07-30 10:25 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-11-17 23:03 |
|
|
|
|
|
[第95楼]
[ 回复时间:2011-10-05 01:20 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-10-03 23:41 |
lz的想法非常赞啊,而且你的程序可以再少一列。(虽然有错误,但是减少了很多读寄存器的时间,赞)
assume cs:abc
abc segment
mov ax,0200h
mov ds,ax
mov cx,64
s:mov bx,cx // 这里把cx的内容存进bx完全是多余的,可以直接用cx的内容吗
mov [bx],bl // 两句合成一句 mov [cx],cl
loop s
mov ax,4c00h
int 21h
abc ends
end
我只会做8条指令的。。。 | | |
|
|
|
|
[第96楼]
[ 回复时间:2011-10-05 06:07 ]
[引用]
[回复]
[ top ] | |
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59 |
|
|
|
|
|
[第97楼]
[ 回复时间:2011-10-09 22:41 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-10-03 23:41 |
mov [cx],cl
可以这样用吗?
------------------
回复:可以这样用的。【cx】只是表征地址,但是没有说明操作数的大小,cl就表示复制一个字节。如果是cx就是复制一个字。 | | |
|
|
|
|
[第98楼]
[ 回复时间:2011-10-10 02:26 ]
[引用]
[回复]
[ top ] | |
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59 |
回复:[第97楼] mywtfmp3
请你在debug中试一次再这样说,然后请你再思考下为什么会是那样。 | | |
|
|
|
|
[第99楼]
[ 回复时间:2011-10-10 11:08 ]
[引用]
[回复]
[ top ] | |
荣誉值:10
信誉值:6
注册日期:2011-06-01 16:20 |
to: mywtfmp3
如果还没有自己实践过请不要回复其它人,以免造成误会,谢谢。 | | |
|
|
|
|
[第100楼]
[ 回复时间:2011-11-11 01:35 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-10-10 23:00 |
好多人都说没有初始化bx,我觉得应该算是初始化过了,应为有mov bx,cx 这一句啊,是不是你们认为只有设0才是初始化呢?设其他的值也应该算是初始化了啊!楼主程序的问题我看主要还是多了对0020:0040单元的写入,少了对0020:0000单元写0,而只是因为原始为0,所以结果才对了,这个问题楼上许多大人都已经分析清楚了!不过楼主的思路很特别,表示佩服! | | |
|
|
|
|
[第101楼]
[ 回复时间:2011-11-14 23:35 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-11-14 23:34 |
assume cs:tvrctak
code segment
mov ax,0020h
mov ds,ax
mov bx,0
mov cx,64
s:
mov ds:[bx],bl
inc bx
loop s
mov ax,4c00h
int 21h
tvrctak ends
end | | |
|
|
|
|
[第102楼]
[ 回复时间:2011-11-14 23:46 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-11-14 23:34 |
回复:[第17楼]
------------------
有问题啊、通过debug 运行后最后一位.(0020:0000 3f)3f=00;
(0~63)是64位数,但cx=63,每间循环一次,CX-1、当执行到63-63的时候是执行第64步,减后成了0、所以不在执行,保持原来的数,(0020:003F)=原来的数(0)所以第六十四位就变成0了。并不是(十六进制的3f) | | |
|
|
|
|
[第103楼]
[ 回复时间:2011-11-15 19:15 ]
[引用]
[回复]
[ top ] | |
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51 |
|
|
|
|
|
[第104楼]
[ 回复时间:2011-11-26 14:38 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-11-26 13:42 |
|
|
|
|
|
[第105楼]
[ 回复时间:2011-11-27 17:06 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:2
注册日期:2011-11-27 16:20 |
回复:[第7楼]
------------------
7楼兄弟,会覆盖吗?
我记得王老师的书上是说不会覆盖,第一个字形数据假设是1,2这两个内存单元,第二个则是3,4两个内存单元了,怎么会覆盖呢,具体在哪说的我记不得了 | | |
|
|
|
|
[第106楼]
[ 回复时间:2011-11-27 17:09 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:2
注册日期:2011-11-27 16:20 |
回复:[第7楼]
------------------
7楼兄弟,会覆盖吗?
我记得王老师的书上是说不会覆盖,第一个字形数据假设是1,2这两个内存单元,第二个则是3,4两个内存单元了,怎么会覆盖呢,具体在哪说的我记不得了
------------------
回复:好像是第五章,问题5.1里面有,没有具体说,只是在问题里面体现出来了 | | |
|
|
|
|
[第107楼]
[ 回复时间:2011-11-27 17:28 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:2
注册日期:2011-11-27 16:20 |
回复:[第33楼]
------------------
我去,你再想想loop是怎么执行的,每次执行前CX都要-1
s:mov bx,cx
mov [bx],bl
你说他有没有变 | | |
|
|
|
|
[第108楼]
[ 回复时间:2011-11-27 17:40 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:2
注册日期:2011-11-27 16:20 |
很棒的创意,如何提高程序的效率就是这样一点一点思考出来的,对于的楼主的做法,应该是肯定而不是否定,当然问题不可掩盖,至于初始化,有的时候也很巧妙的利用的,你判断他不需要初始化就不必再操作,否则反而降低了程序效率
奇思妙解不是很好,这种讨论的气氛也很好,哈,我喜欢 | | |
|
|
|
|
[第109楼]
[ 回复时间:2011-11-28 20:42 ]
[引用]
[回复]
[ top ] | |
荣誉值:1
信誉值:4
注册日期:2011-11-28 20:29 |
to 3楼:
楼主的程序有两个错误,
第一个:mov ax,0200h ;应改为:mov ax,0020h ,这个他自己已经发现了。
第二个:mov cx,64 ;应改为:mov cx,63 或者 mov cx,003Fh 。
;使用循环,在次数上确实容易出现错误。
;因此最后 0020:0040 的内存单元被赋值为40,出现了错误。
;其实我觉得这个loop 就相当于C语言里面的 do...while 循环。
最后说一点,0020:0000 的内存单元本来初始化为0了,后来通过mov 命令再次赋值为0,对于这个问题,楼主的程序是对的,并没有错误。 | | |
|
|
|
|
[第110楼]
[ 回复时间:2011-11-28 20:46 ]
[引用]
[回复]
[ top ] | |
荣誉值:1
信誉值:4
注册日期:2011-11-28 20:29 |
回复:[第7楼]
------------------
对的,我同意你的观点。
但是我认为这个程序并不是一个好程序,显得很混乱,
而且最后一步操作带了个尾巴,这是错误的。
反正我不喜欢这样的程序。
我还是觉得楼主的程序非常好。 | | |
|
|
|
|
[第111楼]
[ 回复时间:2011-11-28 20:47 ]
[引用]
[回复]
[ top ] | |
荣誉值:1
信誉值:4
注册日期:2011-11-28 20:29 |
回复:[第10楼]
------------------
mov bx,cx
这条语句就是初始化。 | | |
|
|
|
|
[第112楼]
[ 回复时间:2011-11-28 20:52 ]
[引用]
[回复]
[ top ] | |
荣誉值:1
信誉值:4
注册日期:2011-11-28 20:29 |
回复:[第17楼]
------------------
s:mov [bx],bx ;改为:s:mov [bx],bl | | |
|
|
|
|
[第113楼]
[ 回复时间:2011-11-28 21:08 ]
[引用]
[回复]
[ top ] | |
荣誉值:1
信誉值:4
注册日期:2011-11-28 20:29 |
回复:[第110楼]
------------------
补充一下,我说的是在使用 mov ds:[bx],bx 这条语句的情况下 | | |
|
|
|
|
[第114楼]
[ 回复时间:2011-11-28 21:15 ]
[引用]
[回复]
[ top ] | |
荣誉值:1
信誉值:4
注册日期:2011-11-28 20:29 |
回复:[第109楼]
------------------
这个我想了一下,最后一句话我说了。
楼主的程序是有问题的,
cx的值等于操作的次数。
实际上cx必须为64或3Fh.
看来楼主的程序还是要加一句啊。 | | |
|
|
|
|
[第115楼]
[ 回复时间:2011-11-28 21:16 ]
[引用]
[回复]
[ top ] | |
荣誉值:1
信誉值:4
注册日期:2011-11-28 20:29 |
|
|
|
|
|
[第116楼]
[ 回复时间:2012-01-11 10:00 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-01-11 09:15 |
哪位大大帮忙把0~63按照倒叙排列写个程序啊,其他条件都和题目一样的 就把正序改成倒叙的 | | |
|
|
|
|
[第117楼]
[ 回复时间:2012-01-11 22:34 ]
[引用]
[回复]
[ top ] | |
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51 |
用63减去当前的cx值后,然后将得到的值存进去就可以了吧。 | | |
|
|
|
|
[第118楼]
[ 回复时间:2012-01-21 01:05 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-01-10 21:29 |
倒叙代码不知道对不对
assume cs:code
code segmnet
mov ax,0020H
mov ds,ax
mov bx,63
mov cx,64
s: mov [bx],bl
sub bx,1
loop s
mov ax,4c00h
int 21
code ends
end | | |
|
|
|
|
[第119楼]
[ 回复时间:2012-01-21 01:17 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-01-10 21:29 |
|
|
|
|
|
[第120楼]
[ 回复时间:2012-02-29 20:02 ]
[引用]
[回复]
[ top ] | |
荣誉值:30
信誉值:4
注册日期:2012-01-01 16:36 |
仅仅分析代码:
mov ax,0200h
mov ds,ax
mov cx,64
s:mov bx,cx
mov [bx],bl
loop s
这个挺好
mov ax,4c00h
int 21h
楼主这么想很好,不过忽略了一点
s:mov bx,cx
mov [bx],bl
loop s
这一段中前面两条指令最后一次执行是在cx=1的情况下,紧接着执行loop s的时候0=cx=cx-1,就直接跳到下一步去了。而没有对0:200内存单元进行设置。
这样既能算是你的程序是正确的,又能算不正确的。
正确在:(引用教材)"DOS方式下,一般情况,0:200~0:2ff空间中没有系统或其他程序的数据或代码",这样0:200这个内存单元可以说是默认为0的。所以你的程序忽略了对0:200单元的数据的设置某种意义以上来说是可行的。
不正确在:0:200也有可能不是0,所以如果忽略了对其进行设置,很可能导致程序运行结果不正确。例如:用debug运行你写的程序,先e 0:200 5,然后再执行程序,那结果就不正确了。
我个人倾向于你的程序是不正确的观点。同时你的程序要修改正确,那也需要再增加一条指令。具体有很多种方式。
以上:个人愚见。
------------------
回复: | | |
|
|
|
|
[第121楼]
[ 回复时间:2012-02-29 21:35 ]
[引用]
[回复]
[ top ] | |
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51 |
|
|
|
|
|
[第122楼]
[ 回复时间:2012-03-21 18:50 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-03-20 16:03 |
assmue cs:abc
abs segment
mov ax,20h
mov ds,ax
mov cx 63
s:mov ds:{cx},cx
loop s:
mov ax 4c00h
int 21h
abc ends
end
不知道这么些对不对 | | |
|
|
|
|
[第123楼]
[ 回复时间:2012-03-21 22:36 ]
[引用]
[回复]
[ top ] | |
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51 |
|
|
|
|
|
[第124楼]
[ 回复时间:2012-04-06 12:21 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:1
注册日期:2008-09-04 16:35 |
|
|
|
|
|
[第125楼]
[ 回复时间:2012-04-19 10:59 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-04-18 10:45 |
能用cx替代bx么?使用从3fH倒序赋值,以为都是8位 也不存在地位高位 | | |
|
|
|
|
[第126楼]
[ 回复时间:2012-04-24 19:01 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:1
注册日期:2008-09-04 16:35 |
assume cs:abc
abc segment
mov ax,0200h
mov ds,ax
mov cx,64
s:mov bx,cx
mov [bx-1],bl
loop s
mov ax,4c00h
int 21h
abc ends
end
这样子应该没得问题了。 | | |
|
|
|
|
[第127楼]
[ 回复时间:2012-05-11 19:54 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-05-09 17:59 |
这也是一个解:
assume cs:code
code segment
mov ax,20h
mov ds,ax
mov cx,3fh
s: mov bx,cx
mov [bx],bl
loop s
mov ds:[0],cl
mov ax,4c00h
int 21h
code ends
end | | |
|
|
|
|
[第128楼]
[ 回复时间:2012-07-10 15:28 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-06-26 07:49 |
支持120楼的说法,逻辑都错了,虽然你的最终结果可能是正确的,但那是在特定的环境下才会有那样有结果 | | |
|
|
|
|
[第129楼]
[ 回复时间:2012-07-18 15:24 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-07-15 10:30 |
|
|
|
|
|
[第130楼]
[ 回复时间:2013-04-29 08:24 ]
[引用]
[回复]
[ top ] | |
荣誉值:424
信誉值:0
注册日期:2013-04-08 10:06 |
全错了诶,., 如果不 执行 BX=0 cx 也不一定= 0 的情况
那么假设,cx=1111H 那么 bx = 1111H BH=11H BL=11H DS已经被赋值 20H
那么第一次循环 执行mov DS:BX,bl 的内存单元与数据分别是多少?
mov ds:[bx],bl mov 20:1111,11H ?
题目要求 向内存0:200-0:23F 就已经限定了 BX必须为0
初始化mov bl,0 也不行,, BH值未知, 也有机会让写入的内存单元不在题目要求范围内 | | |
|
|
|
|
[第131楼]
[ 回复时间:2013-08-04 02:19 ]
[引用]
[回复]
[ top ] | |
荣誉值:26
信誉值:0
注册日期:2013-07-15 09:25 |
为什么不置顶!这种探索精神应被凸显和传承。希望不要结帖。 | | |
|
|
|
|
[第132楼]
[ 回复时间:2014-03-23 18:09 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2014-02-22 22:19 |
0 进不到 0:200 处
这种做法挺好,用了cx迭减
省去了inc
可惜是错的做法 | | |
|
|
|
|
[第133楼]
[ 回复时间:2014-10-01 12:06 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2013-08-02 20:20 |
差了一条指令:mov bx,0
楼主忽视了bx初值的设定。 | | |
|
|
|
|
[第134楼]
[ 回复时间:2015-03-17 00:14 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2015-02-17 23:21 |
经典不朽之作!
电脑就这样,顺着弄逆着弄都好,CX是3FH或40H都一样,只要控制住0:200 - 0:23F的值是0-63(3FH)就行,结果摆在那就行!求全是一种情形,不求全也是一种解。 | | |
|
|
|
|
[第135楼]
[ 回复时间:2015-03-27 16:34 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-03-19 14:30 |
|
|
|
|
|
[第136楼]
[ 回复时间:2016-04-03 14:15 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2016-04-03 14:09 |
为什么没人用我这种
assume cs:code
code segment
mov ax,0000h
mov ds,ax
mov bx,0200h
mov cx,64
s: mov [bx],bl
inc bl
loop s
mov ax,4c00h
int 21h
code ends
end | | |
|
|
|
|
[第137楼]
[ 回复时间:2017-07-17 12:21 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2017-07-17 12:09 |
我改成这个样子,编译一直报错,好像是mov [cx],cl这句有问题。
但是我看书上说[]里面可以直接用寄存器的啊(第三版P112),
改成mov ds:[cx],cl也不行。难道只能用mov [bx],cl吗?
assume cs:code
code segment
mov ax,20H
mov ds,ax
mov cx,3FH
s: mov [cx],cl//masm报错
loop s
mov [cx],cl
mov [cx],cl//报错
int 21H
code ends
end
多谢各位大佬,抱拳 | | |
|
|
|
|
[第138楼]
[ 回复时间:2017-08-30 21:58 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2017-08-11 18:33 |
这个不知道还有没有在接,一楼的看了下,存在两个问题:
1,送入DX的应该是20H,不能是200H,否则与题不符。
2,这样倒着写进去,因为loop判定时cx=0则向下执行,所以dx:0位并没有写入数据。
136楼的更为漂亮些 | | |
|
|
|
|
[第139楼]
[ 回复时间:2019-01-30 14:06 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2019-01-30 14:05 |
回复:[第136楼]
------------------
136 楼的最漂亮。楼主的代码是有问题的。 | | |
|
|
|
|
[第140楼]
[ 回复时间:2020-07-09 11:02 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2020-07-09 10:47 |
参考答案:
assume cs:code
code segment:
mov bx,200h // 设bx
mov cx,40h // 设cx
sub ds,ds // 设ds
s: mov [bx],dx // 写值
inc bx // bx增量
inc dx // cx增量
loop s // s循环
mov ax,4c00h
int 21
code ends
end | | |
|
|
|
|
[第141楼]
[ 回复时间:2020-07-09 11:08 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2020-07-09 10:47 |
参考答案:
assume cs:code
code segment:
mov bx,200h // 设bx
mov cx,40h // 设cx
sub ds,ds // 设ds
s: mov [bx],dx // 写值
inc bx // bx增量
inc dx // cx增量
loop s // s循环
mov ax,4c00h
int 21
code ends
end
------------------
勘误:
inc dx // cx增量
更改为
inc dx // dx增量 | | |
|
|
|
|
[第142楼]
[ 回复时间:2020-09-12 16:26 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2020-08-30 07:31 |
assume cs:code
code segment
mov ax,020h
mov es,ax
mov bx,0
mov cx,64
s: mov es:[bx],bl
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end | | |