


- [bigbigwolf] 调试程序很有用,比如中断、子程序 ^_^ 01/22 10:35
- [wuyan6293] 恩 明白,程序加载后CS指向end指向的标号,而单代码段位紧跟psp后时候,CS-DS=10H成立, 11/18 17:06
- [younggay] 在一个程序刚刚加载后,CS-DS=10H ============= 这只在程序的开始段为ps 11/18 15:11
- [younggay] 可以看看算法讲堂。 11/18 14:28
- [younggay] 基本上是这么个意思。 11/18 14:27
- [younggay] 试试把这个递归理解为 条件时刻改变的循环 。 11/18 14:12
- [younggay] debug 和 编译器对指令的不同理解吧。 11/18 14:08
- [mess] 点,面。 11/16 09:50
[2010-01-24 22:59] 检测点9的一道题
好险啊,差点就被迷惑了。
此题的关键考点是:loop s 这句。
应为loop指令时循环指令,所以这条指令转移地址的产生是通过位移量来产生的,此时的位移量为-5,当把这条指令复制到s3处时候,由于-5的位移量所以当执行s3处的loop 指令时,会跳转到s2处,自己可以算下位移量是否为-5,呵呵 这道题很考人啊。
(因为s,s1,s2,s3这些标号是给编译器去处理的,所以在程序执行过程中去修改代码只根据目标程序去)
最后答案选什么呢?自己算下哦,不方便透露哦!...
此题的关键考点是:loop s 这句。
应为loop指令时循环指令,所以这条指令转移地址的产生是通过位移量来产生的,此时的位移量为-5,当把这条指令复制到s3处时候,由于-5的位移量所以当执行s3处的loop 指令时,会跳转到s2处,自己可以算下位移量是否为-5,呵呵 这道题很考人啊。
(因为s,s1,s2,s3这些标号是给编译器去处理的,所以在程序执行过程中去修改代码只根据目标程序去)
最后答案选什么呢?自己算下哦,不方便透露哦!...
阅读全文 |
评论次数(0) |
浏览次数(580) |
所属类型(汇编要点)
[2010-01-24 22:47] 第9章跳转和实验9
⒈先说下Jmp指令:
Jmp指令从大的来分可以分为 ⑴.段内转移 ⑵断间转移
而断内转移又可以分为①断内短转移 short ②段内近转移near
断间的转移即为远转移 far
从得到的新的CS:IP的方式来看Jmp指令可以分成:
⑴通过偏移量来得到新的地址,通过标号形式的段内转移都属于这种方式
⑵直接给出IP后CS:IP, 可以通过寄存器和内存单元来给出地址
在转移指令中有条件转移指令和循环指令都属于短转移,都是通过位移量来形成新地址的
2.再来说下实验9吧,以下是我解决此题的思路:见笑了
⑴先从题目给出的内容中得到以下信息:
在DOS中,屏...
Jmp指令从大的来分可以分为 ⑴.段内转移 ⑵断间转移
而断内转移又可以分为①断内短转移 short ②段内近转移near
断间的转移即为远转移 far
从得到的新的CS:IP的方式来看Jmp指令可以分成:
⑴通过偏移量来得到新的地址,通过标号形式的段内转移都属于这种方式
⑵直接给出IP后CS:IP, 可以通过寄存器和内存单元来给出地址
在转移指令中有条件转移指令和循环指令都属于短转移,都是通过位移量来形成新地址的
2.再来说下实验9吧,以下是我解决此题的思路:见笑了
⑴先从题目给出的内容中得到以下信息:
在DOS中,屏...
阅读全文 |
评论次数(0) |
浏览次数(554) |
所属类型(汇编要点)
[2010-01-20 11:16] P命令
* P[=地址] [数据] 进程命令
功能: 将一个子程序调用指令,循环指令,中断指令或一个重复字符串指令,停止在下一条指令上。
说明: 在执行一条子程序调用指令,循环指令,中断指令或一个重复字符串指令时,发出P命令去执行有关指令,并且返回到要执行的下一条指令。 P命令和T一样选用来跟踪程序运行过程用的命令,我们可以在P命令中指定程序运行的起始地址,指令个数,如未指定则CS:IP所指定程序的地址开始一次运行一条令。
P与T命令的差别在于P命令把CALL/INT当成一条指令来执行,简化了跟踪过程,P命令只运行RAM内存的命令,而T命令则可运行RAM和ROM里的程序。...
功能: 将一个子程序调用指令,循环指令,中断指令或一个重复字符串指令,停止在下一条指令上。
说明: 在执行一条子程序调用指令,循环指令,中断指令或一个重复字符串指令时,发出P命令去执行有关指令,并且返回到要执行的下一条指令。 P命令和T一样选用来跟踪程序运行过程用的命令,我们可以在P命令中指定程序运行的起始地址,指令个数,如未指定则CS:IP所指定程序的地址开始一次运行一条令。
P与T命令的差别在于P命令把CALL/INT当成一条指令来执行,简化了跟踪过程,P命令只运行RAM内存的命令,而T命令则可运行RAM和ROM里的程序。...
阅读全文 |
评论次数(1) |
浏览次数(670) |
所属类型(汇编要点)
[2010-01-20 10:33] 第5章
1.loop指令的执行步骤:
1.CX-1->CX
2.判断cx是否为0,若不为0,跳转到标号所在位置执行;若为0 则执行loop指令后的那条指令
所以在进入循环前要设置循环次数,即给CX赋值,循环执行次数等于CX的值。
思考:若开始时候给cx赋值为0,循环会执行多少次?
回答:第一次执行loop时候,CX-1,则cx=0-1=0ffffH 所以循环执行此时为0ffffh+1 次。
2.在汇编的源程序中为了把数据和地址区分开来,同一规定数据的最高位不能为字母。所以ffffh在源程序中要写成0ffffh,否则编译器会报错。...
1.CX-1->CX
2.判断cx是否为0,若不为0,跳转到标号所在位置执行;若为0 则执行loop指令后的那条指令
所以在进入循环前要设置循环次数,即给CX赋值,循环执行次数等于CX的值。
思考:若开始时候给cx赋值为0,循环会执行多少次?
回答:第一次执行loop时候,CX-1,则cx=0-1=0ffffH 所以循环执行此时为0ffffh+1 次。
2.在汇编的源程序中为了把数据和地址区分开来,同一规定数据的最高位不能为字母。所以ffffh在源程序中要写成0ffffh,否则编译器会报错。...
阅读全文 |
评论次数(0) |
浏览次数(558) |
所属类型(汇编要点)
[2010-01-19 18:34] 实验3要点(转)
王爽老师汇编语言支持网站http://www.asmedu.net/里面有详细讨论.
这是我转抄的请参考:
问题1、TT单步执行 pop ax 时,出现 NTVDM CPU 遇到无效指令 对话框。为什么?如何解决?
-----------------------------------------------------------------------------------------
在windows系列操作系统环境下,我们进入的cmd或command都是工作在保护模式下的DOS操作系统的虚拟机,在保护模式下,windows操作系统要对程序执行的优先权以及程序访问内存空...
这是我转抄的请参考:
问题1、TT单步执行 pop ax 时,出现 NTVDM CPU 遇到无效指令 对话框。为什么?如何解决?
-----------------------------------------------------------------------------------------
在windows系列操作系统环境下,我们进入的cmd或command都是工作在保护模式下的DOS操作系统的虚拟机,在保护模式下,windows操作系统要对程序执行的优先权以及程序访问内存空...
阅读全文 |
评论次数(0) |
浏览次数(829) |
所属类型(汇编要点)
[2010-01-18 15:27] 内存地址分配
8086的内存地址分配如图所示:
单电脑开机,CPU刚开始工作时候,CS=F000H,IP=FFF0H,所以开机执行的第一条指令的地址为 EA=FFFF0H。
在图中可以看到这个地址所在的内存的空间为ROM,也就是BIOS所在的内存部分,这条指令是一个跳转指令,跳到BIOS的自检程序所在的地址。...
单电脑开机,CPU刚开始工作时候,CS=F000H,IP=FFF0H,所以开机执行的第一条指令的地址为 EA=FFFF0H。
在图中可以看到这个地址所在的内存的空间为ROM,也就是BIOS所在的内存部分,这条指令是一个跳转指令,跳到BIOS的自检程序所在的地址。...
阅读全文 |
评论次数(0) |
浏览次数(695) |
所属类型(汇编要点)
[2009-11-15 17:40] 第五章小知道点。
DEBUG中将 MOV AX,[0] 解释为 MOV AX,DS:[0000]
而在宏汇编中将其解释为 MOV AX,0 (立即数)
要想在宏汇编中实现和DEBUG中一样的功能,可以将代码改写为 MOV AX,DS:[0]....
而在宏汇编中将其解释为 MOV AX,0 (立即数)
要想在宏汇编中实现和DEBUG中一样的功能,可以将代码改写为 MOV AX,DS:[0]....
阅读全文 |
评论次数(2) |
浏览次数(680) |
所属类型(汇编要点)
[2009-11-15 10:38] 递归的求1~100的和。
DATA SEGMENT
N DW 100
RESULT DW ?
DATA ENDS
STACK SEGMENT
DB 100 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:DATA,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV AX,N
CALL SUM
MOV AH,4CH
INT 21H
SUM PROC
PUSH AX
DEC AX
CMP AX,0
JNE LP2
LP1:POP AX
ADD RESULT,AX
RET
LP2...
N DW 100
RESULT DW ?
DATA ENDS
STACK SEGMENT
DB 100 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:DATA,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV AX,N
CALL SUM
MOV AH,4CH
INT 21H
SUM PROC
PUSH AX
DEC AX
CMP AX,0
JNE LP2
LP1:POP AX
ADD RESULT,AX
RET
LP2...
阅读全文 |
评论次数(1) |
浏览次数(625) |
所属类型(汇编要点)
[2009-11-13 21:42] 关于程序开始时DS和CS
当刚开始对一个程序进行DEBUG时,在执行断装填之前,系统会将DS指向系统默认的地方,而CS则指向代码的开始位置。数据段真正开始的位置是DS现在所指向的地址再加上10H(前256个字节为描述区),断的装填也正是将DS指向这个位置,也是开始放数据的地方,堆栈段不用写代码进行装填,DOS会默认填入。...
阅读全文 |
评论次数(1) |
浏览次数(692) |
所属类型(汇编要点)
[2009-11-13 21:34] 求1!+2!+......+5!
DATA SEGMENT
SUM DW 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
XOR AX,AX
MOV CX,5
LOP1:CALL FACT
ADD SUM,AX
LOOP LOP1
MOV AH,4CH
INT 21H
FACT PROC
PUSH CX
MOV AX,1
LOP2:MUL CL
LOOP LOP2
POP CX
RET
FACT ENDP
CODE ENDS
END STAR...
SUM DW 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
XOR AX,AX
MOV CX,5
LOP1:CALL FACT
ADD SUM,AX
LOOP LOP1
MOV AH,4CH
INT 21H
FACT PROC
PUSH CX
MOV AX,1
LOP2:MUL CL
LOOP LOP2
POP CX
RET
FACT ENDP
CODE ENDS
END STAR...
阅读全文 |
评论次数(0) |
浏览次数(424) |
所属类型(汇编要点)