. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->外中断
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  关于15.4章节里程序的疑惑  [待解决] 回复[ 4次 ]   点击[ 380次 ]  
beyondchxff
[帖 主]   [ 发表时间:2009-03-13 12:19 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-12-10 00:00
我用的是第2版的王爽汇编

书上的空循环程序
delay:push ax
       push dx
       mov dx,1000h ;循环100000000H次,
       mov ax,0
    s1:sub ax,1
       sbb dx,0
       cmp ax,0
       jne s1
       cmp dx,0
       jne s1
       pop dx
       pop ax
       ret
我想问DX设置1000H,怎么会是100000000H呢,如果(dx)=1000h,那么算下来也就是4096次,那个100000000H次是怎么来的呢,我真是想不明白
还有就是cmp ax,0
       jne s1  我感觉这两句程序是多余的,可以不要,我也试了去掉,也一样的运行,因为这段空循环程序是利用dx循环减1来实现争取时间间隙的,所以只要注意dx是否为零就可以了,这是小弟的一点愚见,还请各位前辈指点
younggay
[第1楼]   [ 回复时间:2009-03-16 10:53 ]   [引用]   [回复]   [ top ] 
荣誉值:273
信誉值:0
注册日期:2008-01-23 20:23
cmp ax,0 
----------
第一层循环的这里,能够控制每次执行10000H次,这样与外层循环中的dx=1000H相结合,乘法计算10000H*1000H=10000000H(这里是7个0,不是8个0)。
aten
[第2楼]   [ 回复时间:2009-04-12 00:19 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2008-12-11 08:43
首先要理解sbb指令的执行意思。然后再看这条指令sub ax,1能提供给sbb dx,0什么?楼主仔细分析下就能得到答案了!!
nanlingcg
[第3楼]   [ 回复时间:2009-05-02 16:49 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:0
注册日期:2009-03-15 00:31
delay:push ax
       push dx
       mov dx,1000h ;循环100000000H次,
       mov ax,0
    s1:sub ax,1     ;ax减1000H次
       sbb dx,0     ;dx才减1, 用的是SBB
       cmp ax,0
       jne s1       ;这个jine不要倒影响不大,只少循环1000H次。。。影响不大
       cmp dx,0
       jne s1
       pop dx
       pop ax
       ret
fangyugirl
[第4楼]   [ 回复时间:2009-05-12 10:52 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-03-06 09:35
我开始也没弄明白,其实也就是低位放在AX,高位放在DX,所以就是10000000,就是带进位减法,你看看222页的11.7的那个例题:003E1000H-00202000H.
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved