A. 使用汇编语言U命令,它最多会显示多条信息
U命令不指定范围或长度时,默认反汇编32个字节。
可以用 U <起点> <终点> 或者 U <起点>L<长度>格式指定范围或指定长度。
若使用指定范围或长度的格式,最多可以反汇编64KB长的代码。
因为x86指令不是等长指令,而是变长的,所以U命令是按代码字节数计数,而不是按指令的条数计数。
B. 汇编指令机器码问题
机器指令有它的编码规则,以若干位代表不同的操作码,若干位代表寻址方式组合,若干位表示操作数类型是字还是字节,若干位表示各个操作数,等等。
8086指令的具体编码可以查阅一些机器语言参考手机。
一般说来,CPU里面只有少数几个寄存器,只需要不多的几位即可区分不同的寄存器。比如区分8个寄存器只需要 3 bit 进行编码。
因此,用寄存器寻址的机器指令,长度较短。
而内存或立即寻址,需要给出8位或16位的操作数,或内存地址,它们需要的位数显然比寄存器要多,因而机器指令也就会变长。
sub ax, ax指令两个操作数都是寄存器,所以操作码+寻址方式组合+数据类型+两操作数的寄存器代码这些组合后只有两个字节: 2B C0
mov ax, 0这条指令中,16位的源操作数--立即数0就要单独占用两个字节,其它操作码和目的操作数等的编码再占用一个字节,指令长度就成了三个字节: B8 00 00 (后面的两个00 00就是源操作数 0 )
C. 如图,dos下我想从键盘输入一个字符,用u命令汇编,然后用t命令一步一步跟踪,请问接下去怎么操作,
lz这么晚了还在学习,精神可嘉啊。在网络上问汇编一般很少会有回答的,你最好去csdn的汇编模块去问。如果在没有参数的情况下使用,则u命令分解 20h 字节(默认值),从前面u命令所显示地址后的第一个地址开始,如果有参数的话,需要指定要反汇编代码的起始地址和结束地址,或起始地址和长度(有关有关range参数有效值的信息可以网上查查),例如:
要反汇编16(10h)字节,从地址04BA:0100开始,请键入以下命令:
u04ba:100l10
Debug按以下格式显示结果:
04BA:0100206472AND[SI+72],AH
04BA:010369DB69
04BA:01047665JBE016B
04BA:0106207370AND[BP+DI+70],DH
04BA:010965DB65
04BA:010A63DB63
04BA:010B69DB69
04BA:010C66DB66
04BA:010D69DB69
04BA:010E63DB63
04BA:010F61DB61
如果只显示从04BA:0100到04BA:0108特定地址的信息,请键入以下命令:
u04ba:01000108
Debug显示以下内容:
04BA:0100206472AND[SI+72],AH
04BA:010369DB69
04BA:01047665JBE016B
04BA:0106207370AND[BP+DI+70],DH
++++
debug的t有两个参数address和number,你这里是需要指定启动跟踪指令的地址(如果你省略address参数,跟踪将从程序的 CS:IP 寄存器所指定的地址开始,address参数有效值的信息你也可以网上查查);number是指定要跟踪的指令数,必须是十六进制数,默认为1,这里说一下,必须在address参数之前使用等号 (=) 以便将它与 number 参数区分。例如:
t10
假设当前在CS:100,那么将从CS:100开始执行10行代码,并且将显示每一行代码执行后寄存器的变化。
D. 系统如何调用debug查看CPU汇编指令和内存
Debug是DOS(Disk Operating System,磁盘操作系统)、windows提供的实模式(8086方式)程序的调试工具。使用它,可以查看CPU各种寄存器中的内容、内存的情况和在机器码级跟踪程序的运行。
查看更详细的介绍DEBUG网络
一般我们常用到的Debug参数:
r命令查看、修改CPU寄存器的内容;
d命令查看内存中的内容;
e命令改写内存中的内容;
u命令将内存中的机器指令翻译成汇编指令;
t命令执行一条机器指令;
a命令以汇编指令的格式在内存中写入一条机器指令。
打开界面如下:
将debug.exe拷贝到D盘(某盘根目录),在DOSBOX中输入“mount c D:\”命令(此命令输入后有“Drive C is mounted as local directory d:\”,再输入“c:”回车。然后输入debug,结果如下:
例如输入u可以查看系统的汇编指令,一直输入u会列出系统所有的汇编指令。如下图所示:
E. Debug的U命令
一般第一条指令显示的数字为数据段段地址,如下图所示:
F. 急~汇编语言考卷问题
1.A=-1110111B,[A]反=10001000B,[A]补=10001001B
B=+0110111B,[B]反=00110111B,[B]补=00110111B。
2.18的BCD编码是(00011000)。
3.8086CPU由__总线接口部件______和__执行部件_______两部分组成。
4.循环程序的结构主要由置初值、工作部分和__循环控件变量更新__三个组成部分。
5.调用子程序通常用_call_指令,返回调用程序通常用_ret_指令。
三、简答题
1.8086CPU数据总线和地址总线各是多少?最大的存储空间是多少?
数据总线是16,地址总线为20,最大的存储空间寻址为1M
2、什么是逻辑地址?它由哪两部分组成?8086的物理地址是如何形成的?
逻辑地址是将存储器分成若干个段之后而出现的一种地址形式,它由段地址和偏移地
址组成,物理地址是将逻辑地址中的段地址左移4个二进制位,再加上偏移地址而形成的.
3.有两个16位的字31DAH和5E7FH,它们在8086系统存储器中的地址分别为00130H和
00134H,画出它们的存储示意图。
图在下面上传了有
4.简述汇编语言的上机过程包括哪几个步骤?
1.设计程序
2.使用masm命令编译程序,生成扩展名为obj的文件
3.使用link命令连接程序,生成扩展名为exe的可执行文件
4.执行生成的可执行文件
5..简述在DEBUG下的U和D命令功能各是什么?若屏幕显示如下,指出代码段和数据段段
址各为多少?若要查看数据段0100开始的100个数据,如何操作?
-u
0B36:0000B8340BMOVAX,0B34
0B36:00038ED8MOVDS,AX
0B36:00058A260600MOVAH,[0006]
0B36:0009A00E00MOVAL,[000E]
U命令为反汇编命令,即载入已在汇编命令A下面写好的程序,D命令为显示存储单元的值.
上面显示命令的代码段为0B36,数据段为0B34
查看数据段0100的100个数据命令为D01000163
四、程序分析题(本大题共1小题,共20分)
1.下列程序完成两个字符串的比较,请先阅读程序:
DATASEGMENT
STRING1DB'MOVE.'
STRING2DB'MOVE.'
MESS1DB'MATCH.',13,10,'$'
MESS2DB'NOMATCH!',13,10,'$'
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
MOVES,AX
LEASI,STRING1
LEADI,STRING2
MOVCX,4
REPECMPSB
JZMATCH
LEADX,MESS2
JMPSHORTDISP
MATCH:LEADX,MESS1
DISP:MOVAH,09
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
①将程序填写完整
②解释MOVAH,09
INT21H
这两条指令的意思是输出一个字符串,字符串的入品地址为DS:DX,即要输出的字符串在
DS:DX处,并以'$'为字符串的结束符.
G. 汇编中-u后跟的上:【0000】是什么意思
那个是机器码,也就是这一句汇编指令对应的机器指令,汇编指令只有编译成机器指令cpu才能看的懂,例如mov ax,0770,编译成机器指令后就是B87007
H. 汇编语言 debug里u命令的显示规则
u--------------------从偏移地址100h开始反汇编
u5------------------从偏移地址5h地址开始反汇编
u5 10--------------将偏移地址5H~10H范围内的代码反汇编
u2000:100--------从2000:100地址(段地址:段偏移)开始反汇编
I. debug下如何查看汇编程序结果,是用u命令吗,用u命令具体如何查看
U命令是查看内存单元中的内容的,会显示出机器码和对应的汇编指令
看运行结果的话用T命令,T是单步执行,每次执行一句,并显示各寄存器和标志位的值。
16位汇编学了基础的后就去学32位汇编吧。
J. 汇编语言,怎么在DEBUG下,将上述目标文件调入内存,利用U、D等命令,检查RAM区中的数据
比如汇编结果为a.exe
C:\>debug a.exe
-u 0 ;如果没有发现自己想要查找的语句,继续u命令
...
... mov ax, 1C22 ; 此二句表明,数据段
... mov ds, ax ;地址为1c22:0000
... mov ax, 1d22 ;如果有类似此二句
... mov es, ax ;表明附加段地址为1d22:0000
-d 1c22:0 ;查看数据段数据
-d 1d22:0 ;查看附加段数据