关于实验十六的诸多疑问?
本帖最后由 顺qi吇繎 于 2012-3-10 14:03 编辑问题一:
代码1:
do7c:
subst:cmp ah,3
ja subend
cmp ah,0
je sub1
cmp ah,1
je sub2
cmp ah,2
je sub3
cmp ah,3
je sub4
subend: iret
代码2:
do7c: jmp subst
table dw sub1,sub2,sub3,sub4
subst:push bx
cmp ah,3
ja subend
mov bl,ah
mov bh,0
add bx,bx
call word ptr table
subend:pop bx
iret
为什么我在测试中,代码1可以正确的跳到子程序,而代码2总是跳不到指定的子程序呢?
代码2是直接定址表法,需要在纯dos下才行吗?
问题二:
;在第四个子程序里
sub4:
push cx
push si
push di
push es
push ds
mov si,0b800h
mov es,si
mov ds,si
mov si,160
mov di,0
cld
mov cx,24 ;复制24次
sat: push cx
mov cx,160
rep movsb ;复制
pop cx
loop sat
mov cx,80
mov si,0
s22:
mov byte ptr es:,' '
add si,2
loop s22
pop ds
pop es
pop di
pop si
pop cx
ret
请问下,下边的代码,
cld
mov cx,24 ;复制24次
sat: push cx
mov cx,160
rep movsb ;复制
pop cx
loop sat
用得哪个寄存器调整的复制的n+1到n行的,si与di的值总是不变的
我怎么觉得代码的意思是 把第2行中的字符复制的第1行重复24次这个操作而没有n+1到n的效果呢?
本帖最后由 莫名其妙 于 2012-3-10 17:10 编辑
显示器一屏4000 25行 每行160列 所以第一行是0开始到159 第二行就160开始了 所si=160是n+1行di=0 是n行
下面不是有个CX=160 rep movsb这个就是把ds:si的数据复制160次然后给es:di CX=24是复制24行
movsb
页:
[1]