void key(void) //求键值
{
char kvalc;
keychek(); //查键
if (keychek()) //如果有键
{
eep_disp(); //调用显示来延时20毫秒
keychek();
if (keychek()) //再查确认有键
//以下通过PORT7..4逐线输出0,查PINB3..0和PINC4求键值
...
- [游客] 我的被改掉了 10/09 08:48
- [游客] 第二题我还写错了,偏移地址是只能加不能减的!我写成段地址±偏移地址了!晕··· 11/22 21:26
- [游客] 写的很好,只是在我的debug里面使用d命令一次只能显示128个字,所以第一次使用d fff0:0是 11/22 21:22
- [游客] 写的很好,只是在我的debug里面使用d命令一次只能显示128个字,所以第一次使用d fff0:0是 11/22 21:22
- [游客] 好啊!感觉非常好 写的很具体详细 07/04 08:29
- [游客] 博主的问题已经解决了啊,路过 o(∩_∩)o... 04/21 16:20
- [游客] //kval=16; 04/19 17:52
- [游客] 问题找到了,谢谢路过的朋友们! 04/19 17:52
- [diodes_1] 好方法,学习了 04/19 16:18
- [taotling] 要不还是像你程序里的那样,用MOV DS,a确定DS,然后用偏移量分别来分别访问a、b、c,这样就不 04/19 13:39
[2008-04-19 17:18] 那位老师帮我看看这个嵌套问题出在哪儿?
阅读全文 |
评论次数(3) |
浏览次数(712) |
所属类型(默认类型)
[2008-04-18 16:56] 实验五-(5)
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
c segment
db 0,0,0,0,0,0,0,0
c ends
code segment
start:mov ax,a
mov ds,ax ;将ds指向a数据段
mov ax,c
mov es,ax ;将es指向c数据段
mov bx,0 ;bx寄存器清零
mov cx,4 ;...
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
c segment
db 0,0,0,0,0,0,0,0
c ends
code segment
start:mov ax,a
mov ds,ax ;将ds指向a数据段
mov ax,c
mov es,ax ;将es指向c数据段
mov bx,0 ;bx寄存器清零
mov cx,4 ;...
阅读全文 |
评论次数(4) |
浏览次数(765) |
所属类型(汇编作业)
[2008-04-14 14:40] 实验四-(2)
代码如下:
assume cs:code
code segment
mov ax,0020h
mov ds,ax
mov dx,0
mov cx,64
S:mov ds:[bx],bx
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
运行结果如图...
assume cs:code
code segment
mov ax,0020h
mov ds,ax
mov dx,0
mov cx,64
S:mov ds:[bx],bx
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
运行结果如图...
阅读全文 |
评论次数(1) |
浏览次数(619) |
所属类型(汇编作业)
[2008-04-13 12:46] 对程序5.3的一点疑问!
下面是书上的源程序,将它编译、链接生成p3.exe后,用debug跟踪如图中上部分所示。
assume cs: code
code segment
mov ax,0ffffh
mov ds,ax
mov bx,6
mov al,[bx]
mov ah,0
mov dx,0
mov cx,3
s:add dx,ax
loop s
mov ax,4c00h
int 21h
code ends
end
我把它改成如下:
assume cs: code
code segment
mov...
assume cs: code
code segment
mov ax,0ffffh
mov ds,ax
mov bx,6
mov al,[bx]
mov ah,0
mov dx,0
mov cx,3
s:add dx,ax
loop s
mov ax,4c00h
int 21h
code ends
end
我把它改成如下:
assume cs: code
code segment
mov...
阅读全文 |
评论次数(3) |
浏览次数(632) |
所属类型(默认类型)
[2008-04-10 18:46] 实验三(3)
PSP内容查看结果如图所示...
阅读全文 |
评论次数(3) |
浏览次数(648) |
所属类型(汇编作业)
[2008-04-10 18:40] 实验三(2)
当CPU执行完指令“ADD SP,+04”后,再次使用T命令,就会出现如图所示的错误提示。
分析:
在执行“ADD SS,AX”之前,栈空间为0B79:0~0B79:FFFF,长度为64KB,执行“ADD SS,AX”之后,栈空间变为2000:0~2000:F,长度为16B,执行“ADD SP,4”之后,栈空间为2000:0~2000:3,长度仅为4B
这时对Debug输入T命令,Debug将控制权交给CPU,当CPU执行“POP AX”完指令后,将控制权交给Debug,Debug引发中断,由于当前CPU状态数据长度大于当前栈空间长度,这时Debug将CPU当前状态数据存入当前栈中的操作...
分析:
在执行“ADD SS,AX”之前,栈空间为0B79:0~0B79:FFFF,长度为64KB,执行“ADD SS,AX”之后,栈空间变为2000:0~2000:F,长度为16B,执行“ADD SP,4”之后,栈空间为2000:0~2000:3,长度仅为4B
这时对Debug输入T命令,Debug将控制权交给CPU,当CPU执行“POP AX”完指令后,将控制权交给Debug,Debug引发中断,由于当前CPU状态数据长度大于当前栈空间长度,这时Debug将CPU当前状态数据存入当前栈中的操作...
阅读全文 |
评论次数(3) |
浏览次数(584) |
所属类型(汇编作业)
[2008-04-09 20:49] 第三章实验任务(2)这样理解正确么?
如图所示
1.在执行"MOV AX,2000"之前,默认的栈空间(0B39:FFEE)和20000H~2000FH内存段均为空,如图中红色1所示。
2.执行"MOV AX,2000"之后,CPU会将一些临时信息存入默认栈空间0B39:FFEE 中的某些栈单元里(比如,“MOV AX,2000”指令执行后,AX值被存入0B39:4处的字单元中,IP值被存入0B39:8处字单元中,CS值被存入0B39:A处的字单元中,而且这些值的存放位置会随SP的改变而发生变化),这时20000H~2000FH段内所有单元仍为空,如图中红色2处所示。
3.执行“MOV SS,AX”后,默认的栈段空间...
1.在执行"MOV AX,2000"之前,默认的栈空间(0B39:FFEE)和20000H~2000FH内存段均为空,如图中红色1所示。
2.执行"MOV AX,2000"之后,CPU会将一些临时信息存入默认栈空间0B39:FFEE 中的某些栈单元里(比如,“MOV AX,2000”指令执行后,AX值被存入0B39:4处的字单元中,IP值被存入0B39:8处字单元中,CS值被存入0B39:A处的字单元中,而且这些值的存放位置会随SP的改变而发生变化),这时20000H~2000FH段内所有单元仍为空,如图中红色2处所示。
3.执行“MOV SS,AX”后,默认的栈段空间...
阅读全文 |
评论次数(8) |
浏览次数(659) |
所属类型(汇编作业)
[2008-04-07 15:10] 检测点3.2
(1)
mov ax,1000H
mov ds,ax ; 设置数据段段地址为:1000H
mov ax,2000H
mov ss,ax
mov sp,0010H ; 设置栈段段地址,初始化栈顶地址, 栈空间:20000H~2000FH, 且栈空
push [0] ; sp=sp-2,将1000:0处字单元内容压入栈中, ss:sp指向2000:000E
push [2] ; sp=sp-2,将1000:2处字单元内容压入栈中, ss:sp指向2000:000C
push [4] ; sp=sp-2,将...
mov ax,1000H
mov ds,ax ; 设置数据段段地址为:1000H
mov ax,2000H
mov ss,ax
mov sp,0010H ; 设置栈段段地址,初始化栈顶地址, 栈空间:20000H~2000FH, 且栈空
push [0] ; sp=sp-2,将1000:0处字单元内容压入栈中, ss:sp指向2000:000E
push [2] ; sp=sp-2,将1000:2处字单元内容压入栈中, ss:sp指向2000:000C
push [4] ; sp=sp-2,将...
阅读全文 |
评论次数(3) |
浏览次数(681) |
所属类型(汇编作业)
[2008-04-07 09:48] 关于POP出栈指令的一个问题
如图所示,栈空间为10000H~1000FH,栈中有两个元素“0123H”和“2266H”,书上说:“元素‘2266H’出栈后,在1000CH处‘2266H’任然存在,但是它已不在栈中”
我对这句话不太理解,如果说‘2266H’不在栈中,是不是意味着1000CH~1000DH内存单元不再是栈中的字单元?那么这个时候的栈空间是多少,为什么?还是1000CH~1000FH么?为什么?...
我对这句话不太理解,如果说‘2266H’不在栈中,是不是意味着1000CH~1000DH内存单元不再是栈中的字单元?那么这个时候的栈空间是多少,为什么?还是1000CH~1000FH么?为什么?...
阅读全文 |
评论次数(3) |
浏览次数(690) |
所属类型(默认类型)
[2008-04-07 09:04] 检测点3.1(2)
各寄存器初始值:CS=2000H,IP=0,DS=1000H,AX=0,BX=0;
1> CPU执行的指令序列
mov ax,6622H (指令长度:3字节)
jmp 0ff0:0100(指令长度:5字节)
mov ax,2000H (指令长度:3字节)
mov ds,ax (指令长度:2字节)
mov ax,[0008](指令长度:3字节)
mov ax,[0002](指令长度:3字节)
2> CPU执行每条指令后,CS、IP和相关寄存器中的数值如下:
...
1> CPU执行的指令序列
mov ax,6622H (指令长度:3字节)
jmp 0ff0:0100(指令长度:5字节)
mov ax,2000H (指令长度:3字节)
mov ds,ax (指令长度:2字节)
mov ax,[0008](指令长度:3字节)
mov ax,[0002](指令长度:3字节)
2> CPU执行每条指令后,CS、IP和相关寄存器中的数值如下:
...
阅读全文 |
评论次数(4) |
浏览次数(697) |
所属类型(汇编作业)
『 查看更多文章 』