快疯了!

hk1980 2001-12-23 07:17:57
我做期末作业时,用宏做功能模块,可是jmp\je\ja\jb指令出错"jump out of range by xx bytes",我都要疯了!help

;final.asm
include macro.lib


student struc
sno db 8 dup(' ')
sname db 6 dup(' ')
asm db 3 dup(' ')
cm db 3 dup(' ')
os db 3 dup(' ')
total db 3 dup(' ')
range db 3 dup(' ')
student ends


stsg segment stack 's'
dw 32 dup(?)
stsg ends

data segment
titl db ' Mini-Database System',0DH,0AH,' copyright by HK,91994,BIT',0DH,0AH,0DH,0AH
menu1 db '1-----display',0DH,0AH ;menu
menu2 db '2-----edit',0DH,0AH
menu3 db '3-----sort',0DH,0AH
menu4 db '4-----find',0DH,0AH
menu5 db '5-----save',0DH,0AH
menu6 db '6-----exit',0DH,0AH,'$'

menu2_1 db 0DH,0AH,'1-----insert',0DH,0AH
menu2_2 db '2-----modify',0DH,0AH
menu2_3 db '3-----delete',0DH,0AH,'$'

menu3_1 db 0DH,0AH,'1-----by asm',0DH,0AH
menu3_2 db '2-----by cmp',0DH,0AH
menu3_3 db '3-----by os',0DH,0AH
menu3_4 db '4-----by total',0dh,0ah,'$'

promp db 'choose a number from the menu above:',0DH,0AH,'$'

item db 0DH,0AH,0DH,0AH,'--sno-----sname---asm--cm---os--total-range----',0DH,0AH,'$'
gap db ' $'




studentx student 30 dup(<>)

filename db 'studentx.dat',0
filehandle dw ?

data ends


code segment
assume cs:code,ds:data,ss:stsg,es:nothing
main proc far
mov ax,data
mov ds,ax

lea dx,filename ;open file
mov al,2
mov ah,3dh
int 21h
mov filehandle,ax

lea dx,studentx ;read data from file
mov bx,filehandle
mov cx,870
mov ah,3fh
int 21h

repeat:
mov AX,0600H ;clear screen
mov CX,0
mov DX,184FH
mov BH,07
int 10H

mov AH,02 ;set cursor
mov BH,0
mov DX,0400H
int 10H

lea DX,titl ;display menu
mov AH,9
int 21H
lea DX,promp
mov AH,9
int 21H

rdkb: ;wait for selection from menu
mov AH,1
int 21H
cmp AL,31H
jb beep
cmp AL,36H
ja beep
cmp AL,31H
je display_in
cmp AL,32H
je far ptr edit_in
cmp AL,33H
je far ptr sort_in
cmp AL,34H
je far ptr find_in
cmp AL,35H
je far ptr save_in
jmp quit


beep: ;beep for error
mov AH,14
mov AL,7
mov BH,0
int 10H
jmp repeat

quit: ;quit program
mov ah,3eh
mov bx,filehandle
int 21h
mov ax,4c00h
int 21h

display_in:
display
jmp repeat

edit_in:
edit
jmp repeat

sort_in:
sort
jmp repeat

find_in:
find
jmp repeat

save_in:
save
jmp repeat

insert_in:
insert
jmp repeat

modify_in:
modify
jmp repeat

delete_in:
delete
jmp repeat

sort_by_asm_in:
sort_by asm
jmp repeat

sort_by_cmp_in:
sort_by cm
jmp repeat

sort_by_os_in:
sort_by os
jmp repeat

sort_by_total_in:
sort_by total
jmp repeat

main endp
code ends

end main

;======================
;macro.lib

display macro
local lop1,lop2,lop3,lop4,lop5,out

lea dx,item
mov ah,9
int 21h

lea si,studentx

mov bh,30
lop5: mov cl,8
lop1: mov dl,[si]
mov ah,2
int 21h
inc si

loop lop1
lea dx,gap
mov ah,9
int 21h

mov cl,6
lop2: mov dl,[si]
mov ah,2
int 21h
inc si
loop lop2

lea dx,gap
mov ah,9
int 21h

mov bl,5
lop4: mov cl,3
lop3: mov dl,[si]
mov ah,2
int 21h
inc si
loop lop3

lea dx,gap
mov ah,9
int 21h

dec bl
jnz lop4

mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h

cmp bh,8
jne out
mov ah,1
int 21h

out: dec bh
jnz lop5

mov ah,1
int 21h

endm

edit macro
lea dx,menu2_1
mov ah,9
int 21h
lea dx,promp
mov ah,9
int 21h

mov ah,1
int 21h
cmp al,31h
jb beep
cmp al,33h
ja beep
cmp al,31h
je insert_in
cmp al,32h
je modify_in
jmp delete_in

mov ah,1
int 21h

endm

sort macro
lea dx,menu3_1
mov ah,9
int 21h
lea dx,promp
mov ah,9
int 21h

mov ah,1
int 21h
cmp al,31h
jb beep
cmp al,33h
ja beep
cmp al,31h
je sort_by_asm_in
cmp al,32h
je sort_by_cmp_in
cmp al,33h
je sort_by_os_in
jmp sort_by_total_in




mov ah,1
int 21h
endm

find macro



mov ah,1
int 21h
endm

save macro
mov ah,42h ;put file pointer to head
mov bx,filehandle
xor cx,cx
xor dx,dx

mov ah,40h ;write data to file
mov bx,filehandle
mov cx,870
lea dx,studentx

mov ah,1
int 21h
endm

insert macro


mov ah,1
int 21h
endm

modify macro


mov ah,1
int 21h
endm

delete macro



mov ah,1
int 21h
endm

sort_by macro item

mov ah,1
int 21h
endm


...全文
252 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
740609 2001-12-25
  • 打赏
  • 举报
回复
用.386p呀
8341 2001-12-25
  • 打赏
  • 举报
回复
跳转长度不能超过1024字节。可以分级跳
cracknow 2001-12-24
  • 打赏
  • 举报
回复
给你一份差不多的~~~~~你自己改改
;********************************************
date segment
jiben struc ;定义基本结构体
num db 8 dup(?)
ming db 16 dup(?)
huibian db 10 dup(?)
caozuo db 10 dup(?)
bianyi db 10 dup(?)
yingyu db 10 dup(?)
jiben ends
chengji jiben 100 dup(<>) ;开辟结构体类型空间
shurubiao dw 100 dup(?) ;建立输入表
many db 0
msg1 db '请输入学号     : ','$'
msg2 db '请输入姓名     : ','$'
msg3 db '请输入汇编语言成绩 : ','$'
msg4 db '请输入操作系统成绩 : ','$'
msg5 db '请输入编译原理成绩 : ','$'
msg6 db '请输入专业英语成绩 : ','$'
msg7 db '是否确定删除?(y/n) : ','$'
msg8 db '是否继续输入?(y/n) : ','$'
msg9 db '按班显示请按 1 ',13,10,'按人显示请按 2 ',13,10,'请选择 : ','$'
mss1 db '学号不存在!!',13,10,'$'
mss2 db '查询成绩请按 2 ','$'
mss3 db '插入成绩请按 3 ','$'
mss4 db '删除成绩请按 4 ','$'
mmad db '显示成绩请按 1 ',13,10,'插入成绩请按 2 ',13,10,'删除成绩请按 3 ',13,10,'修改成绩请按 4 ',13,10,'退出系统请按 Q ',13,10,'请选择 : ','$'
mmch db '修改汇编语言成绩请按 1 ',13,10,'修改操作系统成绩请按 2 ',13,10,'修改编译原理成绩请按 3 ',13,10,'修改专业英语成绩请按 4 ',13,10,'请选择 : ','$'
mmgu db '显示成绩请按 1 ',13,10,'退出系统请按 Q ',13,10,'请选择 : ','$'
labr db '班级学习成绩管理系统',13,10,'请输入管理密码 : ','$'
xian db ' 学号 姓名 汇编语言 操作系统 编译原理 专业英语 ',13,10,' -----------------------------------------------------------',13,10,'$'
spac db ' ','$'
password db '123',6 dup(0),'$'
chang db 10 DUP(?)
rete db 13,10,'$'
rate db 13,'$'
temp db 100 DUP(?)
nowdi dw 0
nowcx dw 0
ll dw 0
len dw 8
date ends
;********************************************
zonghe macro gongneng
local chazhao,retian,tianjieshule,refind,zhaodaoend,bucunzai,chazhaoend
chazhao:
xor cx,cx
lea dx,msg1
call output
lea bx,temp
push bx
call getchar
pop dx
push dx
mov cx,bx
sub cx,dx
retian:
cmp cx,len
jz tianjieshule
mov [bx],byte ptr 0
inc bx
inc cx
jmp retian
tianjieshule:
xor cx,cx
dec cx
dec cx
refind:
inc cx
inc cx
mov ax,cx
shr ax,1
mov nowcx,ax
cmp al,many
jz bucunzai
lea si,shurubiao
add si,cx
mov si,[si]
mov dx,len
push dx
lea dx,temp
push dx
push si
call search
or dx,dx
jz refind
call gongneng
jmp chazhaoend
bucunzai:
lea dx,mss1
call output
chazhaoend:
lea dx,msg8
call output
lea bx,temp
call getchar
dec bx
cmp [bx],byte ptr 'y'
jz chazhao
endm
;********************************************
stk segment
dw 100 DUP(?)
stk ends
;********************************************
code segment
assume cs:code,ds:date,es:date,ss:stk
start:
mov ax,date
mov ds,ax
mov es,ax
mov ax,stk
mov ss,ax
mov sp,100
;*********************************************
allstart:
lea dx,labr
call output
lea bx,temp
push bx
call getchar
pop bx
cmp [bx],byte ptr '1'
jnz guest
inc bx
cmp [bx],byte ptr '2'
jnz guest
inc bx
cmp [bx],byte ptr '3'
jnz guest
lea dx,mmad
call output
jmp realstart
guest:
lea dx,mmgu
call output
realstart:
lea bx,temp
push bx
call getchar
pop bx
cmp [bx],byte ptr '1'
jz xianshi
cmp [bx],byte ptr '2'
jz charu
cmp [bx],byte ptr '3'
jz shanchu
cmp [bx],byte ptr '4'
jz xiugai
jmp tuichu
xianshi:
mov cl,many
or cl,cl
jz allstart
lea dx,msg9
call output
lea bx,temp
push bx
call getchar
pop bx
cmp [bx],byte ptr '1'
jz xianshi1
cmp [bx],byte ptr '2'
jz xianshi2
jmp allstart

charu:
lea si,shurubiao
jmp charu1

shanchu:
jmp shanchu1

xiugai:
jmp xiugai1

tuichu:
jmp tuichu1
;*********************************************
xianshi1:
lea dx,xian
call output
lea bx,shurubiao
xianshi3:
lea dx,spac
call output
mov si,word ptr[bx]
push cx
call ddplay
pop cx
add bx,2
dec cl
or cl,cl
jnz xianshi3
jmp allstart

xianshi2:
zonghe xianshi4
jmp allstart
;*********************************************
charu1:
mov di,nowdi
mov [si],di
inc si
inc si
lea dx,msg1
call output
lea bx,[di].num
call getchar
lea dx,msg2
call output
lea bx,[di].ming
call getchar
lea dx,msg3
call output
lea bx,[di].huibian
call getchar
lea dx,msg4
call output
lea bx,[di].caozuo
call getchar
lea dx,msg5
call output
lea bx,[di].bianyi
call getchar
lea dx,msg6
call output
lea bx,[di].yingyu
call getchar
add nowdi,64
inc many
lea dx,msg8
call output
lea bx,temp
push bx
call getchar
pop bx
cmp [bx],byte ptr 'y'
jz charu1
call paixu
jmp allstart
;*********************************************
shanchu1:
zonghe shanchuchengji
jmp allstart
;*********************************************
xiugai1:
zonghe change
jmp allstart
;*********************************************
tuichu1:
;
jmp allend
;*********************************************




;*********************************************
allend:
mov ax,4c00h
int 21h
;*********************************************
output proc near ;DX传参,输出DX中的内容
mov ah,9
int 21h
ret
output endp
;*********************************************
getchar proc near ;BX传参,将键盘输入存放
reget: ;到[BX]中
mov ah,1
int 21h
cmp al,0dh
jz quit
cmp al,17h
jz regets
cmp al,08
jz regets
mov [bx],al
inc bx
jmp reget
regets:
dec bx
jmp reget
quit:
lea dx,rete
call output
ret
getchar endp
;*********************************************
shanchuchengji proc near
call xianshi4
lea dx,msg7
call output
lea bx,temp
call getchar
dec bx
cmp [bx],byte ptr 'y'
jnz shanchuchengjiend
xor cx,cx
mov cl,many
sub cx,nowcx
dec cx
lea di,shurubiao
add di,nowcx
add di,nowcx
mov si,di
inc si
inc si
rep movsw
dec many
shanchuchengjiend:
ret
shanchuchengji endp
;*********************************************
paixu proc near
xor si,si
xor cx,cx
mov cl,many
mov ch,cl
daxunhuan:
lea bx,shurubiao
mov cl,ch
dec ch
or ch,ch
jz xunhuanjieshu
xiaoxunhuan:
dec cl
or cl,cl
jz daxunhuan
mov di,[bx]
mov si,[bx+2]
call compare
or dl,dl
jz bubian
mov ax,[bx]
mov dx,[bx+2]
mov [bx],dx
mov [bx+2],ax
bubian:
add bx,2
jmp xiaoxunhuan
xunhuanjieshu:
ret
paixu endp
;*********************************************
compare proc near
xor dx,dx
recomp:
cmp dh,2
jz compjieshu
mov al,byte ptr [di]
cmp al,byte ptr [si]
ja dayu
jb compjieshu
inc di
inc si
inc dh
jmp recomp
dayu:
mov dl,1
compjieshu:
ret
compare endp
;********************************************
comp proc near
xor dx,dx
dec si
dec bx
recompe:
inc dh
inc si
inc bx
cmp dh,5
jz compjieshule
mov al,byte ptr [si]
cmp al,byte ptr [bx]
jz recompe
mov dl,1
compjieshule:
ret
comp endp
;********************************************
search proc near
push bp
mov bp,sp
push ax
push bx
push cx
push di
push si
mov cx,[bp+8]
mov di,[bp+4]
mov si,[bp+6]
rep cmpsb
jz findit
mov dx,0
jmp searchend
findit:
mov dx,1
searchend:
pop si
pop di
pop cx
pop bx
pop ax
pop bp
ret 6
search endp
;********************************************
ddplay proc near
push cx
lea di,temp
mov cx,63
cld
rep movsb
inc di
mov [di],byte ptr '$'
mov dx,di
sub dx,64
call output
lea dx,rete
call output
pop cx
ret
ddplay endp
;*********************************************
xianshi4 proc near
lea dx,xian
call output
lea dx,spac
call output
call ddplay
ret
xianshi4 endp
;*********************************************
change proc near
call xianshi4
lea dx,mmch
call output
lea si,shurubiao
add si,nowcx
add si,nowcx
mov si,[si]
push si
lea bx,temp
call getchar
dec bx
add si,14
mov bx,[bx]
xor bh,bh
sub bx,30h
jiajia:
add si,10
dec bx
or bx,bx
jnz jiajia
mov bx,si
push bx
call getchar
pop dx
mov cx,bx
sub cx,dx
retian1:
cmp cx,10
jz tianjieshule1
mov [bx],byte ptr 0
inc bx
inc cx
jmp retian1
tianjieshule1:
pop si
call xianshi4
changend:
ret
change endp
;*********************************************
code ends
end start
emailcdh 2001-12-24
  • 打赏
  • 举报
回复
jump out of range by xx bytes的问题一般可以用个中途接力的无条件转移来解决。我没仔细看你的程序。
Qiushen 2001-12-24
  • 打赏
  • 举报
回复
要多动动脑啊!
hypmonkey 2001-12-23
  • 打赏
  • 举报
回复
汇编语言课程设计
何必呢
hk1980 2001-12-23
  • 打赏
  • 举报
回复
我的油箱:kunhuang1980@21cn.com
hk1980 2001-12-23
  • 打赏
  • 举报
回复
作业要求:(谁给我一份?我五体投地!!!!!!!!!!星期2交)
汇编语言课程设计
内容
《成绩数据库管理系统》设计。
对以下成绩单管理(30人)
学号(8位) 姓名(6位) 汇编语言(3位) 组成原理(3位) 操作系统(3位) 总分(3位) 名次(3位)



要求
1. 能够实现菜单显示、菜单选择、编辑(录入、插入、修改、删除等)、显示、排序(高→低)、查找、装入数据文件、数据文件存盘、退出功能。
2. 分为两个模块:主控菜单、其它。
3. 数据用结构定义,并单独存在一个.DAT文件中。
4. 主控程序用为CASE结构。
5. 编辑可以全屏幕也可文本行方式,若为文本行方式,以姓名为关键字,以其它字段为关键字作为可选项。
6. 查找条件以姓名为关键字。

21,459

社区成员

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

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