夜读金瓶梅 发表于 2011-6-26 17:31:20

复杂的实验7 享受过程 对错我都努力过

assume cs:codesg

data segment

db'1975','1976','1977','1978','1979','1980','1981','1982','1983'
db'1984','1985','1986','1987','1988','1989','1990','1991','1992'
db'1993','1994','1995'
;以上是表示21年的21个字符(0-53h)

dd16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd345980,590827,803530,1183000,184300,2759000,3753000,4649000,5937000
;(54h-0a7h)

dw 3,7,9,13,20,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800
;(0a8h-0d1h)

data ends

table segment
db 21 dup('year summ ne ?? ')
table ends

stack segment
dw 8 dup(0)
stack ends

codesg segment
start:mov ax,table
      mov es,ax
      mov ax,data
      mov ds,ax
      mov ax,stack
      mov ss,ax               ;把table stack data与寄存器挂钩
      mov sp,16         
      mov bx,0
      mov cx,21               ;设定外循环次数
s0:   push cx
      mov si,0
      mov di,0                ;si di寄存器值0
      mov cx,4
s:   mov ax,ds:
      mov es:,ax   ;通过ax间接转移ds:中的数据.放入段地址es开始偏移地址中
      mov ax,ds:
      mov es:,ax
      inc si
      inc di
      add bx,2
      loop s
      add bx,16
      pop cx                  ;取出cx值 避免死循环
      loop s0
      mov si,0                     
      mov di,0
      mov bx,0a8h
      mov cx,21
s2:   push cx            
      mov si,0
      mov di,0
      mov cx,2                   ;因为ne对应的只有2字节数据。不能4次循环。重新设定循环次数。不知道我的理解对不对
s3:   mov ax,ds:
      mov es:,ax
      inc si
      inc di
      add bx,2
      loop s3
      add bx,16
      pop cx
      loop s2
      mov bx,0                  ;重设bx为零 因为收入中前9个数据没有大于65536 分开来循环 然后放入??中能不能放一起循环
                                        ;我还在思考 有个困惑在这里 debug中首先定义的
         mov cx,9                  ;数据怎么查不到 d ds:0完全看不到数据 输入d ds:120才能查询到数据 但我不确定这到底是定义起始
s4:    mov ax,ds:   ;的数据 还是程序结束时的数据 狂纠结中
      div byte ptr ds:
      mov es:,ax
      add di,16
      add bx,2
      loop s4
      mov bx,77h
      mov cx,12
s5:   mov ax,ds:
      mov dx,ds:
      div word ptr ds:
      mov es:,ax
      add di,16
      add bx,2
      loop s5
      mov ax,4c00h
      int 21h
codesg ends
end start

嗜血丨灵异狂 发表于 2011-6-26 19:51:41

我才学到第六章    代码量太大了看的我头晕:L

xxasy 发表于 2011-6-26 22:03:23

add bx,2
      loop s
      add bx,16
这里开始 bx貌似就一直在加吧?而且上面这里
mov es:,ax   ;通过ax间接转移ds:中的数据.放入段地址es开始偏移地址中
为什么要设置偏移地址在0d2h?感觉好乱.
一步一步写下来。也不容易啊。一起加油吧:lol

xxasy 发表于 2011-6-26 22:15:16

我刚开始学习的时候,就记得鱼老师说过。要学习思路而不是死记硬背。我发现楼主思路很乱。
我的学习方法是。看着视频做笔记,用笔把重点的记录下来。了解每一个题目的思路,看完弄不懂的地方在看书,跟视频结合一下。再不懂的地方就问百度。然后再拿一个干净的本子整理笔记。以后做题的时候哪里忘了就翻翻笔记看看。熟话说好记忆不如烂笔头嘛。前面的知识掌握的好了,现在学起来轻松的多。呵呵

夜读金瓶梅 发表于 2011-6-26 22:35:28

哈哈 确实乱 实际我没看完第8.6章 等我贯彻了甲鱼哥的精神 理清了思路 再来写个优化的 最迟后天来上新代码 :lol

丁丁 发表于 2011-6-27 00:09:06

努力学哦,终有一天我也会明白的,哈

夜读金瓶梅 发表于 2011-6-27 00:26:36

优化版本出炉 请看代码 :lol
assume cs:code,ds:data,es:table

data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995'

dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000


dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800

data ends
table segment
db 21 dup ('year summ ne ?')
table ends

code segment

start:mov ax,data   
       mov ds,ax            ;把data段定义为ds段
       mov ax,table      
       mov es,ax          ;把table段定义为es段               
       mov bx,0             ;初始化
       mov di,0            
       mov si,0
       mov cx,21           ;年份人均收入排名年收入都需要更改21次,所以设定循环21次
    s: mov ax,       ;修改年份,4个字节就是2个字 把al改为ax 程序简化4步   
       mov es:,ax   
       mov ax,
       mov es:,ax   
                              
       mov ax,                  ;修改年收入
       mov es:,ax
       mov ax,            
       mov es:,ax               
                              
       mov ax,          ;修改人数 人数占的2个字节 用bx si就不能通用循环 di就起到作用了
       mov es:,ax               
                                    
       mov ax,            ;增加人均收入
       mov dx,
       div word ptr es:
       mov es:,ax                      
                                    
       add di,2                                                
       add bx,4                     
       add si,16                     
      
       loop s                        
       mov ax,4c00h                     
       int 21h
code ends
end start

Cocol 发表于 2013-7-1 22:48:39

看看老帖,学习学习
页: [1]
查看完整版本: 复杂的实验7 享受过程 对错我都努力过