主题:求教一个程序问题!!!(急)
我在书上看到一个题,是这样的,补全程序,功能是:从SOURCE开始的单元中连续存放着10个压缩BCD数,统计这10个数中0,1,2,3,4,...,9出现的次数,结果存入指定定的内存区域.如数为01H,35H,86H,31H,25H,97H,63H,48H,84H,则结果为:01H,02H,02H,03H,02H,02H,01H,03H,02H.
程序补齐后如下:
extrn load:far,save:far
n equ 10
dseg segment
source db n dup(?)
result db n dup(0)
name0 db 'input.dat',0
name1 db 'output.dat',0
dseg ends
sseg segment stack
db 256 dup (?)
sseg ends
cseg segment
assume cs:cseg,ds:dseg,ss:sseg
start proc far
push ds
xor ax,ax
push ax
mov ax,dseg
mov ds,ax
lea dx,source
lea si,name0
mov cx,n
call load
;**************************************************
lea si,source
mov cx,n
mov bx,0
again: mov al,[si]
mov ah,al
and al,0fh
and ah,0f0h
push cx
mov cl,4
shr ah,cl
pop cx
[color=0000FF][color=FF0000][color=0000FF][color=FF0000][color=C0C0C0][color=FF0000][color=0000FF][color=FF0000][color=C0C0C0][color=FF00FF]mov bl,ah
mov di,bx
inc result[di]
mov bl,al
mov di,bx
inc result[di][/i] [/color][/color][/color][/color][/color][/color][/color][/color][/color][/color] inc si
loop again
;***************************************************
lea dx,result
lea si,name1
mov cx,n
call save
ret
start endp
cseg ends
end start
请指教一下其中的"
mov bl,ah
mov di,bx
inc result[di]
mov bl,al
mov di,bx
inc result[di]"几个语句怎么理解啊,我看了半天一头雾水,搞不明白它是怎么进行比较的..
书上的解释是:"当对数据进行判断的时候,由于数据的大小刚好对应其在RESULT中结果存储的位置,所以判断以后直接将RESULT的相应存储单元加1即可,空处应填INC RESULT[[i]DI]"
那mov bl,ah;mov di,bx/mov bl,al; mov di,bx是怎么判断的呢??
准备考三级呢,有点悬啊.
各位大虾看到了请赶快救火啊!!!!![/i] 谢了!
[fly]谢了![/fly][color=FFFFFF][/color]
程序补齐后如下:
extrn load:far,save:far
n equ 10
dseg segment
source db n dup(?)
result db n dup(0)
name0 db 'input.dat',0
name1 db 'output.dat',0
dseg ends
sseg segment stack
db 256 dup (?)
sseg ends
cseg segment
assume cs:cseg,ds:dseg,ss:sseg
start proc far
push ds
xor ax,ax
push ax
mov ax,dseg
mov ds,ax
lea dx,source
lea si,name0
mov cx,n
call load
;**************************************************
lea si,source
mov cx,n
mov bx,0
again: mov al,[si]
mov ah,al
and al,0fh
and ah,0f0h
push cx
mov cl,4
shr ah,cl
pop cx
[color=0000FF][color=FF0000][color=0000FF][color=FF0000][color=C0C0C0][color=FF0000][color=0000FF][color=FF0000][color=C0C0C0][color=FF00FF]mov bl,ah
mov di,bx
inc result[di]
mov bl,al
mov di,bx
inc result[di][/i] [/color][/color][/color][/color][/color][/color][/color][/color][/color][/color] inc si
loop again
;***************************************************
lea dx,result
lea si,name1
mov cx,n
call save
ret
start endp
cseg ends
end start
请指教一下其中的"
mov bl,ah
mov di,bx
inc result[di]
mov bl,al
mov di,bx
inc result[di]"几个语句怎么理解啊,我看了半天一头雾水,搞不明白它是怎么进行比较的..
书上的解释是:"当对数据进行判断的时候,由于数据的大小刚好对应其在RESULT中结果存储的位置,所以判断以后直接将RESULT的相应存储单元加1即可,空处应填INC RESULT[[i]DI]"
那mov bl,ah;mov di,bx/mov bl,al; mov di,bx是怎么判断的呢??
准备考三级呢,有点悬啊.
各位大虾看到了请赶快救火啊!!!!![/i] 谢了!
[fly]谢了![/fly][color=FFFFFF][/color]