傀儡娃娃 发表于 2012-11-7 16:42:02

刚学问个很菜的问题 实验五第五个程序

assume cs:code
a segment
db 1,2,3,4,5,6,7,8
a ends
b segment
db 1,2,3,4,5,6,7,8
b ends
d segment
db 0,0,0,0,0,0,0,0
d ends
code segment
start:mov cx,8h       
        s:mov ax,a
        mov ds,ax
        mov bx,0
        mov al,ds:
        mov ax,b
        mov ds,ax
        add al,ds:
        mov ax,d
        mov ds,ax
        mov ds:,al
        inc bx
        loop s
       
        mov ax,4c00h
        int 21h
code ends
end start
这个 咋回事?对么?哪里错了??

傀儡娃娃 发表于 2012-11-8 14:26:26

这是实验七 貌似也不对呢 还是不知道哪里错了
assume cs:code,ds:datasg,es:table,ss:stack
datasg 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
datasg ends
table segment
db 21 dup('year summ ne ??')
table ends
stack segment
dw 0,0,0,0
stack ends
code segment
start:        mov ax,datasg
                mov ds,ax
                mov ax,table
                mov es,ax
                mov ax,stack
                mov ss,ax
                mov di,0
                mov si,0
        s1:        mov cx,21
                push cx
                mov bx,0
                mov cx,2
        s:        mov ax,ds:
                mov es:,ax
                mov ax,ds:
                mov es:,ax
                add bx,2
                loop s
                mov ax,ds:
                mov es:,ax
                mov ax,ds:
                mov dx,ds:
                mov bx,ds:
                div word ptr bx
                mov es:,ax
                add di,4
                add si,16
                pop cx
                loop s1
    mov ax,4c00h

    int 21h

code ends

end start

傀儡娃娃 发表于 2012-11-8 14:29:35

提示我个划分溢出,么意思。

傀儡娃娃 发表于 2012-11-8 14:38:35

还有人均收入除法那里换成
mov ax,es:
mov dx,es:
mov bx,es:
行么??

无限幻想 发表于 2012-11-8 18:31:23

start:mov cx,8h      
      s:mov ax,a
      mov ds,ax
      mov bx,0
      mov al,ds:
      mov ax,b
      mov ds,ax
      add al,ds:
      mov ax,d
      mov ds,ax
      mov ds:,al
      inc bx
      loop s
注意红色al,下面那一步的ax, 你又用b给赋值了,很明显,b赋值给ax后,同时改变了al和ah,再到add那一步你还认为al还是原先那个值01是不可能,其实al现在已经是b这个段地址的低位部分,所以产生根本性的错误,其实段寄存器何必死磕一个ds?好歹也有四个,cs,ds,ss,es,虽说ss通常是保存栈的段地址的,但这里又用不到栈,而上面数据段又正好3段,干脆取巧一下。将ds,ss,es全用了,下面是我的代码和标准答案不一样,你看一下:
assume cs: codesg

a segment
db 1,2,3,4,5,6,7,8
a ends

b segment
db 1,2,3,4,5,6,7,8
b ends

d segment
db 8 dup (0)
d ends

codesg segment

start:
   mov ax, d
       mov es, ax
       mov ax, b
       mov ss, ax
       mov ax, a
       mov ds, ax
       mov bx, 0
       mov cx, 4
   s:mov ax,
   add ax, ss:
       mov es:, ax
       add bx, 2
       loop s
       
       mov ax, 4c00h
       int 21h
       
codesg ends
end start
这是debug通过查看正确的。OK

傀儡娃娃 发表于 2012-11-8 18:53:07

无限幻想 发表于 2012-11-8 18:31 static/image/common/back.gif
start:mov cx,8h      
      s:mov ax,a
      mov ds,ax


原来是这样啊。对哦,谢谢了。钻晕了我。
页: [1]
查看完整版本: 刚学问个很菜的问题 实验五第五个程序