每天坚持点点点 发表于 2012-1-18 13:34:18

实验七

先吧代码贴出来吧:
花了半个晚上,感觉头昏昏的,看到这题的时候还有点思路,但还不清晰,,,嗯,本着自己动手的精神,坚持下来写出代码,忘朋友们指点小弟哈啊~ 看看有什么问题,苦恼中程序代码如下:

assume cs:codesg,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,590821,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
codesg segment
start: mov ax,data
       mov ds,ax
       mov ax,table
       mov es,ax
       mov bx,0
       mov si,0
   S1: mov cx,21
       mov dx,cx
    s: mov al,ds:
       mov es:,al
       inc si
       mov cx,4
       loop s
    r: mov ax,ds:
       mov es:,ax
       add si,2
       mov cx,2
       loop r
       mov ax,ds:
       mov es:,ax
       mov ax,ds:
       mov dx,ds:
       div word ptr ds:
       mov es:,ax
       add bx,16
       mov cx,dx
       loop S1
codesg ends
endstart
写完后运行程序,发现程序进入死循环了,单步调试发现到第一个循环的“loop s"的时候就没反应了,估计进入死循环了吧。。。可能还有其它的问题什么的。。。可是夜深了,捣鼓了一下看不早了,头昏眼花了也,就上炕了,呵呵。。   现在发出来,忘指点下啊,,先谢谢了!!!

小马过河 发表于 2012-1-18 17:06:52

S1: mov cx,21
       mov dx,cx
    s: mov al,ds:
       mov es:,al
       inc si
       mov cx,4
       loop s
这些你是想要把年份分21次输入并连续4次输入可从第二行就有问题   bx =变量   cx =循环次数关键你先看懂loop 指令是什么意思      LOOP   s   指令 执行下面两部1 . cx=cx-1    2.检测CX是否为0 如果CX=0 则程序向下执行,否则跳到 S 处执行
后面错误还很多 自己慢慢再看,再看下去 :funk: 我也晕了

Bt、先锋 发表于 2012-1-18 17:54:50

把“S1: mov cx,21”里的“ mov cx,21”放到循环外面就行了

每天坚持点点点 发表于 2012-1-18 23:59:02

小马过河 发表于 2012-1-18 17:06 static/image/common/back.gif
S1: mov cx,21
       mov dx,cx
    s: mov al,ds:


恩,我好像有点明白了,可是这里到底怎么该才能继续进行下去呢?{:5_94:}
页: [1]
查看完整版本: 实验七