主题:大哥,大姐,帮帮忙
这个例子的功能是把block中的正数,负数分别送到两个缓冲区中去.程序如下:
data segment ;定义数据段
block db 43h,0abh ;定义block变量及其数据初值
pdata db 20 dup(?) ;定义存放正数的缓冲区
npata db 20 dup(?) ;定义存放负数的缓冲区
data ends ;数据段定义结束
code segment ;定义码段
assume cs:code ,ds:data ;确定cs,ds和对应段的关系
exp1 pro far ;定义过程
start: push ds ;保存原ds
mov ax,0push as ;ax ;保存在堆栈
mov ax,datamov ds,ax ;数据段段址送ds,es
mov es,ax
lea si,block ;分别置偏移地址
lea di,pdata
lea bx,ndata
cldmov cx,pdata-block ;数据个数送cx
goon:lodsb ;数据送al
test al,80h
jnz minus ;判是负数,则转minus
stosb ;判是正数,送去存入缓冲器
jmp again
minus:xchg bx,di ;交换,使di中为负数缓冲器便址
stosb ;存负数
xchg bx,di ;恢复原便址寄存器
again:loop goon ;循环次数未完,则转goon
ret ;返回dosexp1 endp ;过程定义结束
code ends ;码段定义结束
end start ;汇编结束,断定入口地址
帮帮忙画一下流程图,好吗????
data segment ;定义数据段
block db 43h,0abh ;定义block变量及其数据初值
pdata db 20 dup(?) ;定义存放正数的缓冲区
npata db 20 dup(?) ;定义存放负数的缓冲区
data ends ;数据段定义结束
code segment ;定义码段
assume cs:code ,ds:data ;确定cs,ds和对应段的关系
exp1 pro far ;定义过程
start: push ds ;保存原ds
mov ax,0push as ;ax ;保存在堆栈
mov ax,datamov ds,ax ;数据段段址送ds,es
mov es,ax
lea si,block ;分别置偏移地址
lea di,pdata
lea bx,ndata
cldmov cx,pdata-block ;数据个数送cx
goon:lodsb ;数据送al
test al,80h
jnz minus ;判是负数,则转minus
stosb ;判是正数,送去存入缓冲器
jmp again
minus:xchg bx,di ;交换,使di中为负数缓冲器便址
stosb ;存负数
xchg bx,di ;恢复原便址寄存器
again:loop goon ;循环次数未完,则转goon
ret ;返回dosexp1 endp ;过程定义结束
code ends ;码段定义结束
end start ;汇编结束,断定入口地址
帮帮忙画一下流程图,好吗????