汇编基础问题!50分相送!

ynkmhp 2009-06-16 07:39:19
代码:
dat segment
db 49,56,100,95,63,75,84,59,60,64,69,70,100,98,72,61,59,82,75,51
s1 db 0
s2 db 0
s3 db 0
s4 db 0
s5 db 0
s6 db 0
dat ends
cod segment
assume cs:cod,ds:dat
start :mov ax,dat
mov ds,ax
mov bx,0
mov cx,20
s1: mov al,[bx]
cmp al,60
jae next1
inc inc s1
next1:inc bx
loop s1

mov bx,0
mov cx,20
s2: mov al,[bx]
cmp al,60
jb next2
cmp 69
ja next2
inc inc s2
next2: inc bx
loop s2

mov bx,0
mov cx,20
s3: mov al,[bx]
cmp al,70
jb next3
cmp 79
ja next3
inc inc s3
next3: inc bx
loop s3

mov bx,0
mov cx,20
s4: mov al,[bx]
cmp al,80
jb next4
cmp 89
ja next4
inc inc s4
next4: inc bx
loop s4

mov bx,0
mov cx,20
s5: mov al,[bx]
cmp al,90
jb next4
cmp 99
ja next5
inc inc s5
next5: inc bx
loop s5

mov bx,0
mov cx,20
s6: mov al,[bx]
cmp al,100
jnz next6
inc inc s6
next6: inc bx
loop s6

mov ah,4c00h
int 21
cod ends
end start
编译obj文件报错:
11.ASM(3): error A2024: Segment parameters are changed
11.ASM(4): error A2024: Segment parameters are changed
11.ASM(5): error A2024: Segment parameters are changed
11.ASM(6): error A2024: Segment parameters are changed
11.ASM(7): error A2024: Segment parameters are changed
11.ASM(8): error A2024: Segment parameters are changed
11.ASM(16): error A2024: Segment parameters are changed
11.ASM(19): error A2009: Symbol not defined: INC
11.ASM(21): error A2026: Reference to multidefined symbol
11.ASM(25): error A2024: Segment parameters are changed
11.ASM(28): error A2056: Immediate mode illegal
11.ASM(30): error A2009: Symbol not defined: INC
11.ASM(31): error A2006: Phase error between passes
11.ASM(32): error A2026: Reference to multidefined symbol
11.ASM(36): error A2024: Segment parameters are changed
11.ASM(39): error A2056: Immediate mode illegal
11.ASM(41): error A2009: Symbol not defined: INC
11.ASM(42): error A2006: Phase error between passes
11.ASM(43): error A2026: Reference to multidefined symbol
11.ASM(47): error A2024: Segment parameters are changed
11.ASM(50): error A2056: Immediate mode illegal
11.ASM(52): error A2009: Symbol not defined: INC
11.ASM(53): error A2006: Phase error between passes
11.ASM(54): error A2026: Reference to multidefined symbol
11.ASM(58): error A2024: Segment parameters are changed
11.ASM(61): error A2056: Immediate mode illegal
11.ASM(63): error A2009: Symbol not defined: INC
11.ASM(64): error A2006: Phase error between passes
11.ASM(65): error A2026: Reference to multidefined symbol
11.ASM(69): error A2024: Segment parameters are changed
11.ASM(72): error A2009: Symbol not defined: INC
11.ASM(74): error A2026: Reference to multidefined symbol
11.ASM(76): error A2050: Value out of range

50466 + 450030 Bytes symbol space free

0 Warning Errors
33 Severe Errors
大侠们帮帮忙!谢谢
...全文
616 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
nanlingcg 2009-06-19
  • 打赏
  • 举报
回复
到处都是s1.s2...s(n).编译器都被你搞糊了。不知那个s(n)对应那个s(n)...
mary0208 2009-06-19
  • 打赏
  • 举报
回复
学习
simon_14 2009-06-16
  • 打赏
  • 举报
回复
data segment
score db 49,56,100,95,63,75,84,59,60,64,69,70,100,98,72,61,59,82,75,51
len db $-score
s6 dw 0
s7 dw 0
s8 dw 0
s9 dw 0
s10 dw 0
data ends

sta segment stack
dw 100h dup(?)
top label word
sta ends

code segment
assume cs:code,ds:data,ss:sta
main proc far
mov ax,sta
mov ss,ax
lea sp,top
push ds
xor ax,ax
push ax
mov ax,data
mov ds,ax

lea si,score
mov cl,len
xor ch,ch
l1: mov al,[si]
xor ah,ah
mov bl,10
div bl
cmp al,6
je l6
cmp al,7
je l7
cmp al,8
je l8
cmp al,9
je l9
cmp al,10
je l10
l2: inc si
loop l1
lea si,s6
mov cx,5
l3: mov dl,[si]
add dl,30H
mov ah,2
int 21h
add si,2
loop l3
ret
l6:
lea di,s6
inc word ptr [di]
jmp l2
l7:
lea di,s7
inc word ptr [di]
jmp l2
l8:
lea di,s8
inc word ptr [di]
jmp l2
l9:
lea di,s9
inc word ptr [di]
jmp l2
l10:
lea di,s10
inc word ptr [di]
jmp l2

main endp
code ends
end main

buzuibuxiu 2009-06-16
  • 打赏
  • 举报
回复
本题别人已经帮你解决,但是算法上面还有很大的缺陷
你可以先将原数除以十并取其商,然后再减去5,将用来存储不及格的个数的
变量的编译地址传给DI然后直接用刚才所得到的结果加上DI将现在偏移地址里面的数值加一,将会在很大程度上
提高程序效率,减低储蓄的复杂度,有兴趣的话可以实现一下啊!
Tippisum 2009-06-16
  • 打赏
  • 举报
回复
我不知道你用什么编译器
我使用MASM6.14编译
Segment parameters are changed
不知道是为什么(我编译时没有)

symbol redefinition
s1-s6被你做了两次标号。
当然因此还带来了一些附加错误。

syntax error:inc
inc指令错误(你连写了两个inc)
cmp指令错误(你只给了一个操作数)

killbug2004 2009-06-16
  • 打赏
  • 举报
回复
data segment 
db 49,56,100,95,63,75,84,59,60,64,69,70,100,98,72,61,59,82,75,51
c1 db 0
c2 db 0
c3 db 0
c4 db 0
c5 db 0
c6 db 0
data ends
code segment
assume cs:code,ds:data
start :
mov ax,data
mov ds,ax
mov bx,0
mov cx,20
s1:
mov al,[bx]
cmp al,60
jae next1
inc c1
next1:
inc bx
loop s1

mov bx,0
mov cx,20
s2:
mov al,[bx]
cmp al,60
jb next2
cmp al,69
ja next2
inc c2
next2:
inc bx
loop s2

mov bx,0
mov cx,20
s3:
mov al,[bx]
cmp al,70
jb next3
cmp al,79
ja next3
inc c3
next3:
inc bx
loop s3

mov bx,0
mov cx,20
s4:
mov al,[bx]
cmp al,80
jb next4
cmp al,89
ja next4
inc c4
next4:
inc bx
loop s4

mov bx,0
mov cx,20
s5:
mov al,[bx]
cmp al,90
jb next4
cmp al,99
ja next5
inc c5
next5:
inc bx
loop s5

mov bx,0
mov cx,20
s6:
mov al,[bx]
cmp al,100
jnz next6
inc c6
next6:
inc bx
loop s6

mov ax,4c00h
int 21h
code ends
end start


还有bug 自己改改
ufofind 2009-06-16
  • 打赏
  • 举报
回复
我靠你的错误也太多了
inc inc s1 你好好看一下书没有此类指令

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧