复杂的实验7 享受过程 对错我都努力过
assume cs:codesgdata 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
我才学到第六章 代码量太大了看的我头晕:L add bx,2
loop s
add bx,16
这里开始 bx貌似就一直在加吧?而且上面这里
mov es:,ax ;通过ax间接转移ds:中的数据.放入段地址es开始偏移地址中
为什么要设置偏移地址在0d2h?感觉好乱.
一步一步写下来。也不容易啊。一起加油吧:lol 我刚开始学习的时候,就记得鱼老师说过。要学习思路而不是死记硬背。我发现楼主思路很乱。
我的学习方法是。看着视频做笔记,用笔把重点的记录下来。了解每一个题目的思路,看完弄不懂的地方在看书,跟视频结合一下。再不懂的地方就问百度。然后再拿一个干净的本子整理笔记。以后做题的时候哪里忘了就翻翻笔记看看。熟话说好记忆不如烂笔头嘛。前面的知识掌握的好了,现在学起来轻松的多。呵呵 哈哈 确实乱 实际我没看完第8.6章 等我贯彻了甲鱼哥的精神 理清了思路 再来写个优化的 最迟后天来上新代码 :lol 努力学哦,终有一天我也会明白的,哈 优化版本出炉 请看代码 :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 看看老帖,学习学习
页:
[1]