请问你那个bl应该是写成61h吧, 好像不是bl吧, 还是我理解错了?
我也不理解你想问什么,我这个程序除了第一个是把字母写入2000:0地址外,后面都是从2000:0这个地址复制过去的,所以bl是不可能写成61h的。你把我这代码运行后再看看2000:0 3000:0 4000:0开始的前26个数据就明白了 api 发表于 2011-12-30 13:53 static/image/common/back.gif
我也不理解你想问什么,我这个程序除了第一个是把字母写入2000:0地址外,后面都是从2000:0这个地址复制 ...
恩,好的,我去试试。 本帖最后由 seuer126 于 2011-12-30 16:25 编辑
api 发表于 2011-12-28 19:32 static/image/common/back.gif
我也来试试
有个小问题想向你请教一下,呵呵,在你的程序中,你在做第三个题目的要求时,cld和movsb 这两个指令有什么作用啊? 你的 SI用了两次,这样也可以吗?? 哎呀!累死我了,没看答案,自己写的贴出来晒晒,起码能留个痕迹。
{:5_104:}
{:5_104:}
{:5_104:}
assume cs:code
code segment
start:
mov ax,2000h; 1
mov ds,ax
mov bx,0
mov byte ptr ds:,'a'
mov al,ds:
mov cx,25
s:inc al
inc bx
mov ds:,al
loop s
;2
mov bx,0
mov ax,3000h
mov ss,ax
mov bp,19h
mov cx,26
s0:mov al,ds:
and al,11011111b
mov ss:,al
inc bx
sub bp,1
loop s0
;3
mov bx,0
mov ax,4000h
mov es,ax
mov cx,26
s1:mov al,ds:
mov dl,ss:
add al,dl
mov es:,al
inc bx
loop s1
code ends
end start
seuer126 发表于 2011-12-30 16:18 static/image/common/back.gif
有个小问题想向你请教一下,呵呵,在你的程序中,你在做第三个题目的要求时,cld和movsb 这两个指令有什 ...
标志寄存器第10位是DF,方向标志位,在串处理指令中,控制每次操作后SI,DI的增减。
DF=0 每次操作后SI,DI递增
DF=1 每次操作后SI,DI递减
串传送指令格式:movsb
功能:执行movsb指令相当于进行下面几步操作:
(1)((es)*16+(di))=((ds)*16+(si))
(2)如果DF=0则(si)=(si)+1(di)=(di)+1
如果DF=1则(si)=(si)-1 (di)=(di)-1
cld指令:将标志寄存器的DF位置0
std指令:将标志寄存器的DF位置1
movsb增减的次数根据cx中的值决定
寄存器在同个程序可以多次使用,如果要保存寄存器中的值可以用栈存放
api 发表于 2011-12-30 19:15 static/image/common/back.gif
标志寄存器第10位是DF,方向标志位,在串处理指令中,控制每次操作后SI,DI的增减。
DF=0 每次操作后SI, ...
谢谢啊,小弟有点明白了! 不用栈可以理解为不用push pop么
那我自己模拟个栈不就好了- -
页:
1
[2]