|
【常见问题】x86组合语言Assembly Language连接索引
[复制链接]
|
|
发表于 9-9-2005 10:08 PM
|
显示全部楼层
大概是这样:
mov [ds:0000], 0
mov [ds:0002], 1
mov bx, 0000
mov cx, 次数
test:
mov ax, [ds:bx]
add ax, [ds:bx + 2]
mov [ds:bx+4], ax
add bx, 2
loop test
然后显示 ds:0000 到 ds:bx + 4 的数值
備註:
ds != cs |
|
|
|
|
|
|
|
发表于 10-9-2005 01:37 AM
|
显示全部楼层
哦,对有这个[ ]就是save在address里,但我还是不会分。。因为一开始basic时就已经很乱了。。
我有用你提供的comand放在emu8086试,但第一个comand就出现error。。
如果你有时间,可以大约讲解每个步骤吗?我不是在等答案,只是basic不好,所以不太明白。。
还有,为何下面要+4呢? |
|
|
|
|
|
|
|
发表于 14-9-2005 01:12 AM
|
显示全部楼层
最基本的也不会?你好像连CS和DS都不懂, 那我帮帮你吧。
Flag是用来显示一些“状况”,例如:SF用来显示负数,OF显示overflow。
不同的指令都会出现不同的Flag。例如:加法和减法,当运算结果是零时就会出现ZF,数目太大就会有OF等等。对初学者,要把flag弄清楚并不容易。
首先,flashang的程序有作一个假设,CS不等于DS。
CS和DS都是segment register,除了这俩个之外还有ES和SS。
CS是程序码的部分,DS是数据的部分。
通常我们可以用以下的方法来表示记忆体的位置:
mov AX, CS:[BX] (假设BX=5),代表CS部分的第5个的记忆体
mov AX, CS:[0100] CS部分的第100H的记忆体
mov AX, DS:[SI+4] DS部分的第SI+4的记忆体
假设CS=DS=ES=SS,那么我们就可以省略掉segment register,像这样。
mov BX, 200 BX储存我们要的数值200。
mov [BX], 200 BX的数值是记忆体位置。这个记忆体位置才是用来储存200。
挂弧的差别是,一个是直接储存数值,另一个是记忆体位置。
加二是要读取后两个bytes,作用是移位到下一个记忆体位置。
加四是要读取那两个bytes之后的两个bytes (就是移位到下两个记忆体的位置)。
最后的loop指令是用来作“looping”。
只要CX不等于0,就会跳回test那里,跳到mov ax, [ds:bx]那个指令。
loop指令会把CX减一。 |
|
|
|
|
|
|
|
发表于 14-9-2005 10:39 AM
|
显示全部楼层
关于flag,那天我已经搞清楚了,但偶尔还会有少少不明白。。对于CS,DS这些东西却是非常模糊 |
|
|
|
|
|
|
|
发表于 14-9-2005 11:44 AM
|
显示全部楼层
原帖由 meemee 于 14-9-2005 01:12 AM 发表
最基本的也不会?你好像连CS和DS都不懂, 那我帮帮你吧。
Flag是用来显示一些“状况”,例如:SF用来显示负数,OF显示overflow。
不同的指令都会出现不同的Flag。例如:加法和减法,当运算结果是零时就会出现 ...
谢谢指导。。不过为何我一开始就load不到以下这个?
原帖由 flashang 于 9-9-2005 10:08 PM 发表
大概是这样:
mov [ds:0000], 0
mov [ds:0002], 1
|
|
|
|
|
|
|
|
发表于 14-9-2005 08:24 PM
|
显示全部楼层
那是什么error,你把它post上来。
试试改成这样,如果这个也有error,也把error post上来。
MOV BX,200
MOV WORD PTR [BX],0
MOV WORD PTR [BX+2],1
MOV CX,次数
test:
MOV AX,[BX]
ADD AX,[BX+2]
MOV [BX+4],AX
ADD BX,2
LOOP test |
|
|
|
|
|
|
|
发表于 15-9-2005 02:35 PM
|
显示全部楼层
我想可能是他把
mov ax,ds :[0000],0
mov ax,ds :[0002],1
写成
mov [ds:0000], 0
mov [ds:0002], 1 |
|
|
|
|
|
|
|
发表于 15-9-2005 02:45 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 15-9-2005 03:26 PM
|
显示全部楼层
我补充一点吧...
其实,一开始flashang假设
1.在ds所指的64KB是free to use的buffer,可以想象成是个64KB的array
2.假定资料是16bit integer(2 bytes),所以可以store32K个value (eg: array[32K], 假定array[index] 就是 [bx])
所以...
接下来的code是这个意思...
array[0] = 0 ;mov word ptr [ds:0],0
array[1] = 1 ;mov word ptr [ds:2],1 '因为是16bit integer (2 bytes),所以要+2
index = 0 ;mov bx,0
cx = 次数 ;mov cx,次数
@test:
ax = array[index] ;mov ax,[bx]
ax = ax + array[index + 1] ;add ax,[bx + 2]
array[index + 2] = ax ;mov [bx + 4], ax
index = index + 1 ; add bx, 2
;loop test
cx = cx - 1
if cx > 0 then goto @test
;end of (loop test)
再补充一下,
如果不指定segment register,default就是DS (eg: mov ax,[bx] = mov ax, [ds:bx])
如果一开始cx=0...那就...
希望帮得到你...
[ 本帖最后由 astral 于 15-9-2005 03:35 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 15-9-2005 03:56 PM
|
显示全部楼层
现在可以讲,你们所讲的,对我来讲真的很模糊,可以说不知道你们讲什么,我试下和朋友讨论。。
谢谢大家热心指导 |
|
|
|
|
|
|
|
发表于 15-9-2005 05:04 PM
|
显示全部楼层
有那么复杂吗?
其实整段code也只是:
mov, add, loop而已... |
|
|
|
|
|
|
|
发表于 16-9-2005 10:33 AM
|
显示全部楼层
你们熟悉,当然觉得不复杂。。对我来讲,几时用什么register我也搞不清楚。。 |
|
|
|
|
|
|
|
发表于 16-9-2005 10:36 AM
|
显示全部楼层
我的letcurer说全部人都不会做,他唯有公开答案,指导我们。。但他还没有教完,迟点我把它放在这里,和大家研究。。 |
|
|
|
|
|
|
|
发表于 28-10-2005 01:24 AM
|
显示全部楼层
请问还有什么网页关于8086的吗?
以上很多都进不到。。
多两个星期要考final了,但我还是很blur。。好难!!! |
|
|
|
|
|
|
|
楼主 |
发表于 1-11-2005 12:06 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 2-11-2005 01:45 AM
|
显示全部楼层
我也是一直观察register/flag的东西,但是也是很不明白。。。太难了。。 |
|
|
|
|
|
|
|
楼主 |
发表于 20-11-2005 07:02 AM
|
显示全部楼层
> 多两个星期要考final
final考完了吧?
最近发觉 VMWare 5 + SoftIce 超好用。一边在VMWare里用SoftIce,一边在主操作系统做其它分析或笔记,不必像以前,开了SoftIce介面就没法子去别的程式。 |
|
|
|
|
|
|
|
发表于 11-12-2005 06:52 PM
|
显示全部楼层
原帖由 DeadCow 于 14-9-2005 10:39 AM 发表
关于flag,那天我已经搞清楚了,但偶尔还会有少少不明白。。对于CS,DS这些东西却是非常模糊
為什麼不用Flat memory model,省掉segment registers。 |
|
|
|
|
|
|
|
发表于 24-12-2005 03:17 PM
|
显示全部楼层
原帖由 fxam 于 20-11-2005 07:02 AM 发表
> 多两个星期要考final
final考完了吧?
最近发觉 VMWare 5 + SoftIce 超好用。一边在VMWare里用SoftIce,一边在主操作系统做其它分析或笔记,不必像以前,开了SoftIce介面就没法子去别的程式。
一早考完了,成绩也出了,只不过很少回来留意。。哈哈。。上次考试只拿B,不过老师都是出些比较theory的问题,如果是些programming问题,可能成绩更差。。
觉得8086真的要用很多时间去了解。。
在此,谢谢大家之前一些指导。。 |
|
|
|
|
|
|
|
发表于 3-1-2006 12:18 PM
|
显示全部楼层
这里很多ASM高手!
我是幼稚园班的,以后请多多指教。
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|