前段时间刚刚开始学汇编,因为是自学,而且身边又没有可以请教的人,所以当遇到问题的时候,只能是上网查或者找书。可是有的问题却不是那么容易找到答案,这时真的挺困惑的。
就在前几天,写了一段程序,关于栈操作的,编译和连接都没错,但是在debug调试中却老是出错,郁闷不已。后来查了很久才知道,原来是因为debug与实际运行环境中的不同才导致程序出错的。
在debug中,当我们用t来单步运行程序的时候,debug就会没运行一步就产生一个中断,并把cs ip等寄存器的值入栈以保持当前的状态。所以若在此时sp中的值小于6,而我们的程序中又有入栈的操作时,debug就会提示“指令不存在”或...
- [游客] 我也遇到过 06/27 19:13
- [游客] 恩。中断知识的问题。 06/26 19:46
- [younggay] 博主给出的解答没问题。 08/18 08:37
- [mess] 次数和最后ip的值都没错。 第一条指令后修改一次 ------------- 什么时候?是 08/06 16:25
- [游客] 回答正确。 08/06 09:05
- [游客] 嗯,数据跟每个人的运行环境有关,但是,操作的内存的描述博主的回答是没问题的。 08/06 09:01
- [tinyparticle] 还是不对耶,博主再好好看看 08/05 23:53
- [slan] 哦谢谢,应该是ax=5e37吧 08/05 21:19
- [tinyparticle] (1)计算错误 add ax,[0004] ax=3c14H 07/31 21:13
- [slan] 哦 是2^16=64k 呵呵谢谢 07/30 23:09
[2010-06-12 15:28] debug与实际运行环境的一个区别
阅读全文 |
评论次数(2) |
浏览次数(702) |
所属类型(默认类型)
[2010-06-12 14:37] 实验7
编程,将data中的数据按表中的格式写入到table中,并计算人均收入。
assume cs:code
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995'
dd 16,22,382,1366,2390,8000,16000,24486,50065,97479,140417,197514
dd 3...
assume cs:code
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995'
dd 16,22,382,1366,2390,8000,16000,24486,50065,97479,140417,197514
dd 3...
阅读全文 |
评论次数(0) |
浏览次数(515) |
所属类型(汇编作业)
[2010-06-07 20:58] 检测点6.1
(1)下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据
assume cs:codesg
codesg segment
dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
start:
mov ax,0
mov ds,ax
mov bx,0
mov cx,8
s:
mov ax,[bx]
mov cs:[bx],ax
inc bx
inc bx
loop s
mov ah,4cH
int 21H
codesg ends
end start
(2)同上题,数据的传送用栈来进行。
...
assume cs:codesg
codesg segment
dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
start:
mov ax,0
mov ds,ax
mov bx,0
mov cx,8
s:
mov ax,[bx]
mov cs:[bx],ax
inc bx
inc bx
loop s
mov ah,4cH
int 21H
codesg ends
end start
(2)同上题,数据的传送用栈来进行。
...
阅读全文 |
评论次数(0) |
浏览次数(591) |
所属类型(汇编作业)
[2010-06-07 18:44] 实验4
(1)(2)编程,向内存0:200~0:23f依次传送数据0~63(只能用9条指令,包括"mov ax,4c00H"和"int 21H"
assume cs:code
code segment
mov bx,0
mov cx,63
mov ax,20H
mov ds,ax
s:
mov [bx],bl
inc bx
loop s
mov ax,4c00H
int 21H
code ends
end
(3)下面的程序的功能是将"mov ax,4c00H"之前的指令复制到内存0:200处。
assume cs:code
code segment
...
assume cs:code
code segment
mov bx,0
mov cx,63
mov ax,20H
mov ds,ax
s:
mov [bx],bl
inc bx
loop s
mov ax,4c00H
int 21H
code ends
end
(3)下面的程序的功能是将"mov ax,4c00H"之前的指令复制到内存0:200处。
assume cs:code
code segment
...
阅读全文 |
评论次数(0) |
浏览次数(528) |
所属类型(汇编作业)
[2009-08-05 21:58] 实验2
1、使用debug,将下面的程序写入内存,逐条执行,根据指令运行后的实际情况填空。
mov ax,ffff
mov ds,ax
mov ax,2200
mov ss,ax
mov sp,0100
mov ax,[0] ax=58ea
add ax,[2] ax=5cca
mov bx,[4] bx=31f0
add bx,[6] bx=6120
push ax sp=00fe,修改的内存单元地址是(220fe~220ff)内容为(ca5c)
push bx sp=00fc,修改的内存单元地址是(220fc~220fd)内容为...
mov ax,ffff
mov ds,ax
mov ax,2200
mov ss,ax
mov sp,0100
mov ax,[0] ax=58ea
add ax,[2] ax=5cca
mov bx,[4] bx=31f0
add bx,[6] bx=6120
push ax sp=00fe,修改的内存单元地址是(220fe~220ff)内容为(ca5c)
push bx sp=00fc,修改的内存单元地址是(220fc~220fd)内容为...
阅读全文 |
评论次数(1) |
浏览次数(520) |
所属类型(汇编作业)
[2009-08-05 21:10] 检测点3.2
1、补全下面的程序,使其可以将10000H~1000FH中的8个字,逆序复制到20000H~2000FH中。
mov ax,1000H
mov ds,ax
(mov ax,2000H)
(mov ss,ax)
(mov sp,10H)
push [0]
push [2]
push [4]
push [6]
push [8]
push [a]
push [c]
push [e]
2、如上题
mov ax,2000H
mov ds,ax
(mov ax,1000H)
(mov ss,ax)
(mov sp,0H)
pop [e]
pop [c]
pop ...
mov ax,1000H
mov ds,ax
(mov ax,2000H)
(mov ss,ax)
(mov sp,10H)
push [0]
push [2]
push [4]
push [6]
push [8]
push [a]
push [c]
push [e]
2、如上题
mov ax,2000H
mov ds,ax
(mov ax,1000H)
(mov ss,ax)
(mov sp,0H)
pop [e]
pop [c]
pop ...
阅读全文 |
评论次数(1) |
浏览次数(515) |
所属类型(汇编作业)
[2009-07-31 20:33] 检测点3.1
1)在Debug中,用d 0:0 1f查看内存,结果如下,
0000:0000 70 80 f0 30 ef 60 30 e2-00 80 80 12 66 20 22 60
0000:0010 62 26 e6 d6 cc 2e 3c 3b-ab ba 00 00 26 06 66 88
下面的程序执行前,ax=0,bx=0,写出每条指令执行完后相关寄存器中的值。
mov ax,1
mov ds,ax
mov ax,[0000] ax=2662H
mov bx,[0001] bx=e626H
mov ax,bx ax=e626H
mov ax,[0000] ...
0000:0000 70 80 f0 30 ef 60 30 e2-00 80 80 12 66 20 22 60
0000:0010 62 26 e6 d6 cc 2e 3c 3b-ab ba 00 00 26 06 66 88
下面的程序执行前,ax=0,bx=0,写出每条指令执行完后相关寄存器中的值。
mov ax,1
mov ds,ax
mov ax,[0000] ax=2662H
mov bx,[0001] bx=e626H
mov ax,bx ax=e626H
mov ax,[0000] ...
阅读全文 |
评论次数(3) |
浏览次数(576) |
所属类型(汇编作业)
[2009-07-31 11:44] 终于过了第二章的检测题了
呵呵 三次没过,第一次五对三,接下来两次都是五对四。
一开始做错后不知道错在哪的时候真的很郁闷,免不了产生了烦躁的心情,当时真的有点想以后都不做检测题了。不过,幸亏在论坛里面转的时候发现了原来这样做也是用心良苦的啊!!当时真是惭愧,于是下了狠心又把第二章来看。终于,在第四次过了!呵呵,也因为这样,让我把第二章里几个一开始模糊不解又含糊过去的知识点给弄懂理解了。
哈哈 现在的心情就两个字——”开心“
汇编网 真的不错!...
一开始做错后不知道错在哪的时候真的很郁闷,免不了产生了烦躁的心情,当时真的有点想以后都不做检测题了。不过,幸亏在论坛里面转的时候发现了原来这样做也是用心良苦的啊!!当时真是惭愧,于是下了狠心又把第二章来看。终于,在第四次过了!呵呵,也因为这样,让我把第二章里几个一开始模糊不解又含糊过去的知识点给弄懂理解了。
哈哈 现在的心情就两个字——”开心“
汇编网 真的不错!...
阅读全文 |
评论次数(0) |
浏览次数(400) |
所属类型(默认类型)
[2009-07-31 11:25] 检测的2.3
下面的3条指令执行后,cpu几次修改IP?都是在什么时候?最后IP中的值是多少?
mov ax,bx
sub ax,ax
jmp ax
答:第一条指令后修改一次,第二条一次,第三条两次,总共修改4次IP;因为最后ax=0,所以IP=0000...
mov ax,bx
sub ax,ax
jmp ax
答:第一条指令后修改一次,第二条一次,第三条两次,总共修改4次IP;因为最后ax=0,所以IP=0000...
阅读全文 |
评论次数(1) |
浏览次数(535) |
所属类型(汇编作业)
[2009-07-30 23:18] 检测点2.2
1、给定段地址为0001H,仅通过变化偏移地址寻址,cpu的寻址范围为(00010H)到(1000fH)
2、有一数据存放在内存20000H单元中,现给定段地址为SA若想用偏移地址寻到此单元,SA应满足的条件是:最小为(1001H),最大为(2000H)...
2、有一数据存放在内存20000H单元中,现给定段地址为SA若想用偏移地址寻到此单元,SA应满足的条件是:最小为(1001H),最大为(2000H)...
阅读全文 |
评论次数(1) |
浏览次数(505) |
所属类型(汇编作业)
『 查看更多文章 』