8086汇编小问题

来源:百度知道 编辑:UC知道 时间:2024/06/17 11:42:36
是这样,我们学校的板子 数据区是从00500H-00FFFH,我在数据区里设的变量,在程序里就不能正确引用,出来的数据也不是我设的。老师说数据区太小,要我把我变量设在代码段里。
哪位老师能给我讲下这到底是怎么回事,能不能用ORG硬把数据区设一个位置,怎么数据区小就一定错呢!我们老师讲东西特别不耐烦,我都问怕了。
如果设在代码段里,我查了查,好像要在引用变量之前,先DB才能分配空间,所以要把变量写在前面,我想问下是不是这样,我们实验室讲义里的程序是把[变量名] DB 。。。放在了代码段的末尾。糊涂了。
这是一开始的程序
http://zhidao.baidu.com/question/99829437.html
硬件没问题,我把变量去掉,全改成立即数就能显示。

针对你说的情况,我主要解决将数据放在代码段的问题。至于怎样段控、位控,因为不了解那个板子,所以,原程序主要指令未作任何改动。你运行下试试看,若还是不行,我就无能为力了。

; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
PORTA equ 00H
PORTB equ 01H
CONTR equ 03H
SEGTAB DB 06H,5BH,4FH,66H,6DH,7DH,7,7FH,6FH,3FH
WEIZHI DB 7FH
Start: push cs
pop ds ;使数据段与代码段同段
; 位控0亮,A口段控,B口位控
MOV DX,CONTR
MOV AL,80H
OUT DX,AL ;A B 口均为输出 B口高位接左端
MOV AL,0FFH
MOV DX,PORTA
OUT DX,AL
INC DX
OUT DX,AL
DISP: lea di,SEGTAB ;数字
lea si,WEIZHI;位置
MOV CX,8
LOP: MOV AL,[DI] ;段值
MOV DX,PORTA
OUT DX,AL
MOV AL,[SI] ;位置
MOV DX,PORTB
OUT DX,AL
INC DI
ROR BYTE PTR [SI],1
PUSH CX
MOV CX,0
DELAY: LOOP DELAY
POP CX
LOOP LOP
JMP DISP
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code END