鱼C论坛

 找回密码
 立即注册
查看: 1827|回复: 5

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

[复制链接]
发表于 2012-11-7 16:42:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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:[bx]
        mov ax,b
        mov ds,ax
        add al,ds:[bx]
        mov ax,d
        mov ds,ax
        mov ds:[bx],al
        inc bx
        loop s
       
        mov ax,4c00h
        int 21h
code ends
end start
这个 咋回事?对么?哪里错了??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 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:[bx+di]
                mov es:[si+bx],ax
                mov ax,ds:[bx+di+84]
                mov es:[si+bx+5],ax
                add bx,2
                loop s
                mov ax,ds:[si+84+84]
                mov es:[si+10],ax
                mov ax,ds:[bx+di+84]
                mov dx,ds:[bx+di+84+2]
                mov bx,ds:[si+168]
                div word ptr bx
                mov es:[si+13],ax
                add di,4
                add si,16
                pop cx
                loop s1
    mov ax,4c00h

    int 21h

code ends

end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-11-8 14:29:35 | 显示全部楼层
提示我个划分溢出,么意思。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-11-8 14:38:35 | 显示全部楼层
还有人均收入除法那里换成
mov ax,es:[si+7]
mov dx,es:[si+5]
mov bx,es:[si+10]
行么??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-11-8 18:31:23 | 显示全部楼层
start:mov cx,8h        
        s:mov ax,a
        mov ds,ax
        mov bx,0
        mov al,ds:[bx]
        mov ax,b
        mov ds,ax
        add al,ds:[bx]
        mov ax,d
        mov ds,ax
        mov ds:[bx],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, [bx]
     add ax, ss:[bx]
         mov es:[bx], ax
         add bx, 2
         loop s
         
         mov ax, 4c00h
         int 21h
         
codesg ends
end start
这是debug通过查看正确的。OK
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-11-8 18:53:07 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-8 02:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表