. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->[bx]和loop指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  关于程序5.6的思考  [已解决] 回复[ 5次 ]   点击[ 300次 ]  
regex
[帖 主]   [ 发表时间:2010-01-03 22:47 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51
书里第五章程序5.6实现了一段地址内数据的累加。  书里的思路(算法)需要循环12次, 我觉得用6次循环应该就可以啦, 具体思路大致如下
地址0  +  地址6
。。      。。
地址5  +  地址b
或者最低地址数据加最高地址数据, 低地址递增高地址递减。 类似于计算1+2+。。。100的算法。
鉴于目前水平有限, 编写不出来代码。
regex
[第1楼]   [ 回复时间:2010-01-04 17:05 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51
我知道就我本人目前的水平,做不到。呵呵。。。
abob
[第2楼]   [ 回复时间:2010-01-05 11:09 ]   [引用]   [回复]   [ top ] 
荣誉值:169
信誉值:0
注册日期:2008-08-19 16:07
5.6这个程序是计算ffff:0~ffff:b单元中的数据的和,也就是计算12个数据的和。

楼主的思路正确 ^_^

下面是我的代码,就是按照楼主的思路写的,先计算ffff:[0]+ffff:[6],再计算ffff:[1]+ffff:[7],依次下去。
用debug跟踪计算结果dx的值,发现和书上的执行结果一样。
(问题,为什么几次执行结果都一样呢?即每次执行ffff:0~ffff:b这块内存的数据没变化。
  答案见实验一的倒数第二小题)

代码如下:
assume cs:code 
data segment 
code segment
        mov ax,0ffffh
        mov ds,ax
        mov bx,0

        mov dx,0

        mov cx,6
      s:mov al,[bx]
        mov ah,0
        add dx,ax
        mov al,[6+bx]
        mov ah,0
        add dx,ax
        inc bx
        loop s

        mov ax,4c00H 
        int 21H 
code ends 
end
regex
[第3楼]   [ 回复时间:2010-01-05 12:11 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51
mov al,[6+bx]
还可以这么用呀? 这可是关键呀!~~佩服!
regex
[第4楼]   [ 回复时间:2010-01-05 12:13 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51
ffff那段地址属于ROM专用, readonly, 当然不会改变啦
regex
[第5楼]   [ 回复时间:2010-01-06 18:19 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51
此贴由 贴主 于 [ 2010-01-06 18:19 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved