请教关于汇编第十章实验十第三个子程序‘数值显示’的问题
本帖最后由 hosoo 于 2015-1-21 17:02 编辑assume cs:code,ds:data
data segment
db 10 dup (0)
data ends
code segment
start:mov ax,12666
mov bx,data
mov ds,bx
mov si,0
call dtoc
mov dh,8
mov dl,3
mov cl,2
call show_str
mov ax,4c00h
int 21h
dtoc:push cx
push si
push ax
push bx
push dx
s:
mov cx,10 ;除数BX的值为10
call divdw ;执行divdw子程序
push cx
pop cx
add cx,30h ;将余数加30H,得到十进制的ASCII码
mov ds:,cl ;将DX放入数据段中
inc si
mov cx,ax ;将AX/BX的商放入CX中做JCXZ的循环条件
jcxz ok ;JCXZ为0时程序跳转到标号为OK的偏移地址处
jmp short s ;跳转到标号为S的偏移地址处
ok:
pop dx ;将DX、BX、AX、SI、CX出栈
pop bx
pop ax
pop si
pop cx
ret
divdw:push ax ;将AX压栈
mov ax,dx ;将高16位放入AX中
mov dx,0 ;DX置0,方便下面的程序
div cx ;H/N得到的商在AX中,余数在DX中
mov bx,ax ;将AX的值保存在BX中
pop ax ;将栈里面的AX出栈
div cx ;L/N得到的商在AX中,(AX)低16位,余数在DX中
mov cx,dx ;将DX的值放入CX中,(CX)余数
mov dx,bx ;将BX的值放入DX中,(DX)高16位
ret
show_str:push cx
push si
push ax
push bx
push dx
mov ax,0b800h
mov es,ax ;把AX的值转给ES段
mov ax,0a0h ;0A0H为每一行的值
mov dx,6 ;字符串显示在DX第6行
mul dx ;将6乘以0A0h,AX得到第6行的偏移地址
add ax,16
mov di,ax ;将第八行的偏移地址放入DI中
mov bp,0 ;赋予ES的偏移地址BP为0
jmp short show_ste ;跳转到SHOW_STR
show_ste:mov cl,ds: ;将偏移地址为ES:SI的值放入CL中,并使CH为0,让JCXZ来判断es:中的值是否为0,为0则跳转到标号为OK的偏移地址处
mov ch,0
jcxz okk ;不为0则向下执行
mov es:,cl ;将(CL)的字符串放入es:中
mov bl,02h ;BL为绿色字体
mov es:,bl
inc si
add bp,2
jmp short show_ste ;跳转到SHOW_STE偏移地址处
okk:pop dx ;将DX、BX、AX、SI、CX出栈
pop bx
pop ax
pop si
pop cx
ret ;从栈中取出IP的值后跳转到CS:IP处
code ends
end start
当程序执行完标号:Dtoc时数据段里面的值为:
当程序执行到标号show_str中这里的时候
CL在debug时是36H,但是在CL放入es:中的时候,CL和BL的值怎么发生改变了,这是什么原因导致的,论坛里的大侠请指点一下,谢谢
对啊,看帖回帖,不知不觉就升级了 对啊,看帖回帖,不知不觉就升级了 顶一下 支持lz 支持lz 这个好、!!额额,支持楼主 加油~~ ThanksForYOuYUB 我还没有看到这里来
{:9_239:} 学习 本帖最后由 zealstar 于 2016-12-5 02:54 编辑
我去,这2015年的问题居然还没人回答……另外,我同样做了实验10.3,感觉楼主的思路和我差不多,但是细节上的问题很多。
看得下去我就逐一解释吧,希望楼主把问题能最终设置为“已解决”
1、为何执行完第一段call dtoc之后,es内的数值会是66621?
解释:因为每次除法之后是取余数,那么先取到的是个位余数6,然后是十位余数6,以此类推。
比如:12345/10取余数,第一次取到5,那么5就会被放在es:0,然后第二次除取到4,那么4被放到了ds:1;这样解释应该比较清楚了吧。
2、关于bl,cl值为何改变?
看楼主的截图来看,是在debug中,cl,bl值于我看来没有改变,而是楼主看错了debug右下角的信息的意思。 所谓当执行到指令 mov es:,cl这样的指令时,debug会显示“目标地址”的地址和操作前地址对应的数值。所以,右下角的es:03d0=39,表示的是目前这个地址中已存在的数据。 学习学习{:10_254:} 支持 路过学习{:10_266:} 支持楼主!热爱鱼c zhic 支持 {:9_227:} 来参考答案
页:
[1]
2