主题:刚学汇编编了个程序找不出错,请帮看
我的汇
[专家分:10] 发布于 2006-04-10 00:06:00
这个程序是比较三个数(一定有二个相同的),把和另外两个不同的那个数的地址送到date0,如果三个都相同就把0ffffh送到date0
data SEGMENT use16
a db 12
b db 12
c db 5 ;;;; ;数据段:在此处添加程序所需的数据
date0 dw ?
data ENDS
stack SEGMENT use16 STACK
db 200 dup(0) ;;; ;初始化堆栈大小为200
stack ENDS
code SEGMENT use16
assume cs:code, ds:data, ss:stack
main : ;;;;; ;主程序入口此处添加主程序代码
mov ax, data
mov ds, ax
mov al,a
cmp al,b ;;;a和b比较
je loop1 ;; ;a和b相等跳到loop1
mov si,offset b ;; ;a和b不相等把b的地址送到date0
mov date0,si
jmp exit
loop1:
cmp al,c ;;;a和c比较
je loop2 ;; ;a和b相等跳到loop2
mov si,offset c
mov date0,si
jmp exit
loop2:
mov bx,0ffffh
mov date0,bx
exit:
mov ah,4ch
int 21h
code ends
end main
回复列表 (共6个回复)
沙发
我的汇 [专家分:10] 发布于 2006-04-10 00:09:00
有3个错请帮看
板凳
C语言爱好者 [专家分:19410] 发布于 2006-04-10 08:12:00
这段代码可以通过汇编的,tasm3.0会认为段名stack是保留字,而tasm5.0已经改过来了。不过,代码倒有一个逻辑错误,a和b不相等并不说明b就是那个不相等的数,a也有可能,还应该把a继续跟c比较。
3 楼
我的汇 [专家分:10] 发布于 2006-04-10 12:49:00
我修改成这样了
data SEGMENT use16
a db 12
b db 12
c db 5 ;;;; ;数据段:在此处添加程序所需的数据
date0 dw ?
data ENDS
stack SEGMENT use16 STACK
db 200 dup(0) ;;; ;初始化堆栈大小为200
stack ENDS
code SEGMENT use16
assume cs:code, ds:data, ss:stack
main : ;;;;; ;主程序入口此处添加主程序代码
mov ax, data
mov ds, ax
mov al,a
cmp al,b ;;;a和b比较
je loop1 ;; ;a和b相等跳到loop1
cmp al,c
je loop3
mov si,offset a ;; ;a和b不相等把b的地址送到date0
mov date0,si
jmp exit
loop3: mov si,offset b ;; ;a和b不相等把b的地址送到date0
mov date0,si
jmp exit
loop1:
cmp al,c ;;;a和c比较
je loop2 ;; ;a和b相等跳到loop2
mov si,offset c
mov date0,si
jmp exit
loop2:
mov bx,0ffffh
mov date0,bx
exit:
mov ah,4ch
int 21h
code ends
end main
还有三个错这是为什么呀!
zy.asm(2): error A2025: Improper align/combine type
zy.asm(8): error A2025: Improper align/combine type
zy.asm(13): error A2025: Improper align/combine type
4 楼
我的汇 [专家分:10] 发布于 2006-04-10 12:55:00
我修改成这样了
data SEGMENT use16
a db 12
b db 12
c db 5 ;;;; ;数据段:在此处添加程序所需的数据
date0 dw ?
data ENDS
stack SEGMENT use16 STACK
db 200 dup(0) ;;; ;初始化堆栈大小为200
stack ENDS
code SEGMENT use16
assume cs:code, ds:data, ss:stack
main : ;;;;; ;主程序入口此处添加主程序代码
mov ax, data
mov ds, ax
mov al,a
cmp al,b ;;;a和b比较
je loop1 ;; ;a和b相等跳到loop1
cmp al,c
je loop3
mov si,offset a ;; ;a和b不相等把b的地址送到date0
mov date0,si
jmp exit
loop3: mov si,offset b ;; ;a和b不相等把b的地址送到date0
mov date0,si
jmp exit
loop1:
cmp al,c ;;;a和c比较
je loop2 ;; ;a和b相等跳到loop2
mov si,offset c
mov date0,si
jmp exit
loop2:
mov bx,0ffffh
mov date0,bx
exit:
mov ah,4ch
int 21h
code ends
end main
还有三个错这是为什么呀!
zy.asm(2): error A2025: Improper align/combine type
zy.asm(8): error A2025: Improper align/combine type
zy.asm(13): error A2025: Improper align/combine type
5 楼
C语言爱好者 [专家分:19410] 发布于 2006-04-10 14:10:00
你用哪个汇编器?
6 楼
我的汇 [专家分:10] 发布于 2006-04-10 16:41:00
谢谢你了
老师叫我去掉use16就得了
我现地想用输入的方式输入这三个数你能不能给我个输入这三个数的语句
我不知道用哪个
谢谢了
我来回复