汇编语言第二章答案
- 格式:doc
- 大小:17.00 KB
- 文档页数:2
补全编程,利用jcxz指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中。
assume cs:codecode segmentstart: mov ax,2000hmov ds,axmov bx,0s: mov ch,0mov cl,[bx]jcxz ok ;当cx=0时,CS:IP指向OKinc bxjmp short sok: mov dx,bxmov ax ,4c00hint 21hcode endsend start检测点9.3补全编程,利用loop指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中。
assume cs:codecode segmentstart: mov ax,2000hmov ds,axmov bx,0s:mov cl,[bx]mov ch,0inc cxinc bxloop sok:dec bxmov dx,bxmov ax,4c00hint 21hcode endsend start书P101,执行loop s时,首先要将(cx)减1。
“loop 标号”相当于dec cxif((cx)≠0) jmp short 标号检测点10.1补全程序,实现从内存1000:0000处开始执行指令。
assume cs:codestack segmentdb 16 dup (0)stack endscode segmentstart: mov ax,stackmov ss,axmov sp,16mov ax, 1000hmov ax, 0push axretfcode endsend start执行reft指令时,相当于进行:pop ippop cs根据栈先进后出原则,应先将段地址cs入栈,再将偏移地址ip入栈。
检测点10.3下面的程序执行后,ax中的数值为多少?内存地址机器码汇编指令执行后情况1000:0 b8 00 00 mov ax,0 ax=0,ip指向1000:31000:3 9a 09 00 00 10 call far ptr s pop cs,pop ip,ip指向1000:91000:8 40 inc ax1000:9 58 s:pop ax ax=8hadd ax,ax ax=10hpop bx bx=1000hadd ax,bx ax=1010h用debug进行跟踪确认,“call far ptr s”是先将该指令后的第一个字节段地址cs=1000h入栈,再将偏移地址ip=8h入栈,最后转到标号处执行指令。
新版汇编语言程序设计【课后习题答案】第1章汇编语言基础知识〔习题1.1〕简述计算机系统的硬件组成及各部分作用。
〔解答〕CPU:包括运算器、控制器和寄存器组。
运算器执行所有的算术和逻辑运算;控制器负责把指指令逐条从存储器中取出,经译码分析后向机器发出各种控制命令,并正确完成程序所要求的功能;寄存器组为处理单元提供所需要的数据。
存储器:是计算机的记忆部件,它用来存放程序以及程序中所涉及的数据。
外部设备:实现人机交换和机间的通信。
〔习题1.2〕明确下列概念或符号:主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB〔解答〕主存又称内存是主存储器的简称,主存储器存放当前正在执行的程序和使用的数据,CPU 可以直接存取,它由半导体存储器芯片构成其成本高、容量小、但速度快。
辅存是辅助存储器的简称,辅存可用来长期保存大量程序和数据,CPU需要通过I/O接口访问,它由磁盘或光盘构成,其成本低、容量大,但速度慢。
RAM是随机存取存储器的英语简写,由于CPU可以从RAM读信息,也可以向RAM写入信息,所以RAM也被称为读写存储器,RAM型半导体存储器可以按地址随机读写,但这类存储器在断电后不能保存信息;而ROM中的信息只能被读出,不能被修改,ROM型半导体通常只能被读出,但这类存储器断电后能保存信息。
存储器由大量存储单元组成。
为了区别每个单元,我们将它们编号,于是,每个存储单元就有了一个存储地址,I/O接口是由一组寄存器组成,为了区别它们,各个寄存器进行了编号,形成I/O地址,通常称做I/O端口。
KB是千字节、MB是兆字节、GB是吉字节和TB是太字节,它们都是表示存储器存储单元的单位。
〔习题1.3〕什么是汇编语言源程序、汇编程序、目标程序?〔解答〕用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编译通过的程序就是目标程序。
〔习题1.4〕汇编语言与高级语言相比有什么优缺点?〔解答〕汇编语言与高级语言相比的优点:由于汇编语言本质就是机器语言,它可以直接地、有效地控制计算机硬件,因而容易产生运行速度快,指令序列短小的高效目标程序,可以直接控制计算机硬件部件,可以编写在“时间”和“空间”两方面最有效的程序。
80X86汇编语言程序设计第二章8086/8088寻址方式和指令系统-(五)转移指令1.无条件转移指令(没有条件碰到就转)(1)无条件段内直接转移指令格式:JMP 标号这条指令使控制无条件地转移到标号地址处。
例如:NEXT:MOV AX,CX……JMP NEXT ;转到NEXT处……JMP OVER ;转到OVER处……OVER: MOV AX,1无条件段内直接转移指令格式如下:由操作码和地址差值构成。
指令的操作码| 地址差地址差:是程序中该无条件转移指令的下一条指令的开始地址到转移目标地址(标号所指定的开始地址)的差值。
因为,在执行无条件段内转移指令时,实际的动作是把指令中的地址差加到指令指针IP上,使IP之内容为目标地址,从而达到转移的目的。
段内无条件直接转移指令中的地址差可用一个字节表示,也可用一个字表示。
如果地址差只要用一个字节表示,就称为短转移;如果地址差要用一个字表示,就称为近转移。
段内短跳转:(-128~127)JMP SHORT QUEST段内近跳转:(64KB)JMP NEAR PTR PROG(2)无条件段内间接转移指令格式:JMP OPRD这条指令使控制无条件地址转移到由操作数OPRD的内容给定的目标地址处。
操作数OPRD可以是通用寄存器,也可以是字存储单元。
(3)无条件段间直接转移指令格式:JMP FAR PTR 标号这条指令使控制无条件地转移到标号所对应的地址处。
标号前的符号“FAR PTR”向汇编程序说明这是段间转移。
例如:JMP FAR PTR EXITEXIT是定义在另一个代码段中的标号。
无条件段间直接转移指令的具体动作时把指令中包含的目标地址的段值和偏移分别置入CS和IP。
这种在指令中直接包含转移目标地址的转移方式称为绝对转移。
(4)无条件段间间接转移指令格式:JMP OPRD这条指令使控制无条件地转移到由操作数OPRD的内容给定的目标地址处。
操作数OPRD必须是双字存储单元。
第一章基础知识检测点1.1(第8页)----------------------(1) 13(2) 1024,0,1023(3) 8192,1024(4) 2^30,2^20,2^10(5) 64,1,16,4(6) 1,1,2,2,4(7) 512,256(8) 二进制注意:1.第4题中的符号'^'指求幂运算(如: 2^30指2的30次方)第二章寄存器(CPU工作原理)检测点2.1(第18页)----------------------(1)写出每条汇编指令执行后相关寄存器中的值。
第一空:F4A3H第二空:31A3H第三空:3123H第四空:6246H第五空:826CH第六空:6246H第七空:826CH第八空:04D8H第九空:0482H第十空:6C82H第十一空:D882H第十二空:D888H第十三空:D810H第十四空:6246H(2)只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。
解答如下:mov ax,2add ax,axadd ax,axadd ax,ax检测点2.2(第23页)----------------------(1)00010H,1000FH(2)1001H,2000H第2题说明:因为段的起始地址要为16的倍数。
所以当段地址小于1001H或大于2000H时CPU都无法寻到。
检测点2.3(第33页)----------------------答:CPU修改了4次IP的值。
情况如下:第1次:执行完mov ax,bx后第2次:执行完sub ax,ax后第3次:读入jmp ax后第4次:执行完jmp ax后最后IP的值为0实验1 查看CPU和内存,用机器指令和汇编指令编程(第33页)-----------------------------------------------------1.预备知识:Debug的使用<此部分略>2.实验任务(第43页)(1)<此部分略>(2)<此部分略>(3)通过DEBUG中的D命令查看到主板的生产日期[以月、日、年,分隔符为'/'的格式]存储在内存ffff:0005~ffff:000C(共8个字节单元中)处。
第1章基础知识检测点1.1(1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为13。
(2)1KB的存储器有1024个存储单元。
存储单元的编号从0到1023。
(3)1KB的存储器可以存储1024*8个bit,1024个Byte。
(4)1GB、1MB、1KB分别是2^30、2^20、2^10 Byte。
(n^m的意思是n的m次幂)(5)8080、8088、80286、80386的地址总线宽度分别是16根、20根、24根、32根,则它们的寻址能力分别为:64(KB)、1(MB)、16(MB)、4(GB)。
(6)8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。
则它们一次可以传送的数据为:1(B)、1(B)、2(B)、2(B)、4(B)。
(7)从内存中读取1024字节的数据,8086至少要读512次、80386至少要读256次。
(8)在存储器中,数据和程序以二进制形式存放。
第2章寄存器答案检测点2.1(1) 写出每条汇编指令执行后相关寄存器中的值。
mov ax,62627 AX=F4A3Hmov ah,31H AX=31A3Hmov al,23H AX=3123Hadd ax,ax AX=6246Hmov bx,826CH BX=826CHmov cx,ax CX=6246Hmov ax,bx AX=826CHadd ax,bx AX=04D8Hmov al,bh AX=0482Hmov ah,bl AX=6C82Hadd ah,ah AX=D882Hadd al,6 AX=D888Hadd al,al AX=D810Hmov ax,cx AX=6246H(2) 只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。
解:mov ax,2add ax,axadd ax,axadd ax,ax检测点2.2(1) 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为00010H到1000FH。
汇编语言-第二版-王爽-完整答案第1章基础知识检测点1.1(1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为13。
(2)1KB的存储器有1024个存储单元。
存储单元的编号从0到1023。
(3)1KB的存储器可以存储1024*8个bit,1024个Byte。
(4)1GB、1MB、1KB分别是2^30、2^20、2^10 Byte。
(n^m的意思是n的m次幂)(5)8080、8088、80286、80386的地址总线宽度分别是16根、20根、24根、32根,则它们的寻址能力分别为:64(KB)、1(MB)、16(MB)、4(GB)。
(6)8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。
则它们一次可以传送的数据为:1(B)、1(B)、2(B)、2(B)、4(B)。
(7)从内存中读取1024字节的数据,8086至少要读512次、80386至少要读256次。
(8)在存储器中,数据和程序以二进制形式存放。
第2章寄存器答案检测点2.1(1) 写出每条汇编指令执行后相关寄存器中的值。
mov ax,62627 AX=F4A3Hmov ah,31H AX=31A3Hmov al,23H AX=3123Hadd ax,ax AX=6246Hmov bx,826CH BX=826CHmov cx,ax CX=6246Hmov ax,bx AX=826CHadd ax,bx AX=04D8Hmov al,bh AX=0482Hmov ah,bl AX=6C82Hadd ah,ah AX=D882Hadd al,6 AX=D888Hadd al,al AX=D810Hmov ax,cx AX=6246H(2) 只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。
解:mov ax,2add ax,axadd ax,axadd ax,ax检测点2.2(1) 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为00010H到1000FH。
第2章微处理器的结构习题与参考答案1.8086/8088 CPU 由哪两大部分组成?请分别叙述它们的功能。
解:8086/8088 CPU均由两个独立的逻辑单元组成,一个称为总线接口单元BIU(Bus Interface Unit),另一个称为执行单元EU(Execution Unit)。
总线接口单元BIU取指令时,从存储器指定地址取出指令送入指令队列排队;执行指令时,根据EU命令对指定存储器单元或I/O端口存取数据。
执行单元EU任务是执行指令,进行全部算术逻辑运算、完全偏移地址的计算,向总线接口单元BIU提供指令执行结果的数据和偏移地址,并对通用寄存器和标志寄存器进行管理。
2.8086/8088与传统的计算机相比在执行指令方面有什么不同?这样的设计思想有什么优点?解:总线接口部分和执行部分是分开的,每当EU执行一条指令时,造成指令队列空出2个或空出一个指令字节时,BIU马上从内存中取出下面一条或几条指令,以添满他的指令队列。
这样,一般情况下,CPU在执行完一条指令后,便可马上执行下一条指令,不像以往8位CPU那样,执行完一条指令后,需等待下一条指令。
即EU从指令队列中取指令、执行指令和BIU补充指令队列的工作是同时进行的。
这样大大提高了CPU 利用率,降低了系统都对存储器速度的要求。
3.状态标志和控制标志有何不同?8086/8088的状态标志和控制标志分别有哪些?解:8086/8088 CPU设立了一个两字节的标志寄存器,共九个标志。
其中标志位O、S、Z、A、P、C是反映前一次涉及ALU操作结果的状态标志,D、I、T是控制CPU操作特征的控制标志。
4.8086/8088 CPU寻址存储器时,什么是物理地址?逻辑地址?它们之间有何关系?解:8086/8088系统中每个存储单元都有一个物理地址,物理地址就是存储单元的实际地址编码。
在CPU与存贮器之间进行任何信息交换时,需利用物理地址来查找所需要的访问的存储单元。
1.8086/8088微处理器地址总线有多少位?寻址范围是多少?答:20位 A0-A19。
寻址范围00000H-FFFFFH2.8086/8088微处理器分哪两部分?各部分主要由什么组成?答:执行单元EU和总线接口单元BIU。
EU包括:ALU、寄存器组、暂存器、标志寄存器、EU控制单元。
BIU包括:指令队列缓冲器、段寄存器及指令指针、总线地址加法器、总线控制逻辑。
4.8086/8088微处理器中有几个通用寄存器?几个变址寄存器?有几个指针寄存器?通常哪几个寄存器也可以作为地址寄存器使用?答:8个通用寄存器AX、BX、CX、DX、SP、BP、SI、DI。
2个变址寄存器SI、DI。
2个指针寄存器SP、BP。
DS、ES、SS、CS地址寄存器。
5.8086/8088微处理器中有哪些标志位?它们的含义和作用如何?答:零标志位ZF、进位标志CF、溢出标志位OF、辅助进位标志位AF、奇偶标志位PF、符号标志位SF、方向标志位DF、中断允许标志位IF、跟踪标志TF。
6.试求出下列运算后的各个状态标志,说明进位标志和溢出标志的区别?1278H+3469H答:0001 0010 0111 1000+0011 0100 0110 10010100 0110 1110 0001ZF=0;SF=0;CF=0;OF=0;AF=1;PF=1。
进位表示最高位产生进位。
溢出表示超出数的表示范围。
8.什么是逻辑地址?什么是物理地址?它们之间有什么联系?各用在何处?答:逻辑地址:产生实际地址的两个地址分量:首地址和偏移地址。
物理地址:内存单元地址。
用户在编写程序时只使用逻辑地址。
程序装到内存中使用物理地址。
物理地址可以通过逻辑地址求得。
9.设现行数据段位于存储器的B0000H到BFFFFH存储单元,DS段寄存器内容为多少?答:DS=B000H11.8086/8088微处理器工作在最小模式和最大模式时的主要特点是什么?有何区别?答:最小模式只有一个CPU不需要总线控制器。
2.1在80x86微机的输入/输出指令中,I/O端口号通常是由DX寄存器提供的,但有时也可以在指令中直接指定00~FFH的端口号。
试问可直接由指令指定的I/O端口数。
答:可直接由指令指定的I/O端口数为256个。
2.2 有两个16位字1EE5H和2A3CH分别存放在80x86微机的存储器的000B0H和000B3H单元中,请用图表示出它们在存储器里的存放情况。
答:存储器里的存放情况如右下图所示:000B0H E5H000B1H 1EH000B2H000B3H 3CH000B4H 2AH2.3在IBM PC机的存储器中存放信息如右下图所示。
试读出30022H和30024H字节单元的内容,以及30021H和30022H字单元的内容。
30020H 12H30021H 34H30022H ABH30023H CDH30024H EFH答:30022H字节单元的内容为ABH;30024H字节单元的内容为EFH。
30021H字单元的内容为AB34H;30022H字单元的内容为CDABH。
2.4 在实模式下,段地址和偏移地址为3017:000A的存储单元的物理地址是什么?如果段地址和偏移地址是3015:002A和3010:007A呢?答:3017:000A、3015:002A和3010:007A的存储单元的物理地址都是3017AH。
2.5 如果在一个程序开始执行以前(CS)=0A7F0H,(如16进制数的最高位为字母,则应在其前加一个0) (IP)=2B40H,试问该程序的第一个字的物理地址是多少?答:该程序的第一个字的物理地址是0AAA40H。
2.6在实模式下,存储器中每一段最多可有10000H个字节。
如果用调试程序DEBUG的r命令在终端上显示出当前各寄存器的内容如下,请画出此时存储器分段的示意图,以及条件标志OF、SF、ZF、CF的值。
C>debug-rAX=0000 BX=0000 CX=0079 DX=0000 SP=FFEE BP=0000SI=0000 DI=0000 DS=10E4 ES=10F4 SS=21F0 CS=31FFIP=0100 NV UP DI PL NZ NA PO NC答:此时存储器分段的示意图如右图所示。
汇编语言各章习题答案习题一答案:1.1无符号数: 11010011=211=D3H,01110111=119=77H,10000011=131=83H,00101111=47=2FH,10101010=170=AAH带符号数:11010011= -45=D3H,01110111=+119=77H,10000011= -125=83H,00101111=+47=2FH,10101010= -86=AAH1.2 5E8AH,0BE6H,3DEH,4940H1.3 00011101+00110101=01010010=52H=8201001001+11101000=00110001=31H=4910111110+01010010=00010000=10H=1610011010+11110001=10001011=8BH= -1171.4 00101001+01010011=01111100+00000110=10000010=82H=8201110011-00100100=01001111-00000110=01001001=49H=4901100110+00011000=01111110+00000110=10000100=84H=840000000100110010+01110101=0000000110100111+00000110=0000001000000111=0207H=2071.5 000020A3H,FF94H,00003456H,007FH,FFFFEC00H1.6无符号数:0~65535,0000H~FFFFH;带符号数:-32768~+32767,8000H~7FFFH 1.7 (1) 38H等于十进制数56,是十进制数56的补码,数字8的ASCII码,十进制数38的压缩BCD码(2) FFH等于十进制数-1,是带符号数-1的补码,无符号数为255(3) 5AH等于十进制数90,是十进制数90的补码,大写字母Z的ASCII码(4) 0DH等于十进制数13,是十进制数13的补码,回车符的ASCII码1.8(1) 108=01101100B=6CH,补码01101100B,压缩BCD码0000000100001000,ASCII码313038H(2) 46=00101110B=2EH,补码00101110B,压缩BCD码01000110,ASCII码3436H(3) –15=11110001B=F1H,补码11110001B,ASCII码2D3135H(4) 254=0000000011111110B=00FEH,补码0000000011111110B,压缩BCD码0000001001010100,ASCII码323534H1.9(1) 56+63=01110111B,CF=0,SF=0,ZF=0,OF=0(2) 83-45=00100110B,CF=0,SF=0,ZF=0,OF=0(3) -74+29=11010011B,CF=0,SF=1,ZF=0,OF=0(4) -92-37=01111111B,CF=1,SF=0,ZF=0,OF=11.10回车、换行、响铃、ESC键、空格键、@、P、p习题二答案:2.9最少划分为16个逻辑段,最多划分为65536个逻辑段(每段16个字节)2.10CS:IP,DS:BX、SI、DI,ES:BX、SI、DI,SS:SP、BP2.11字节单元保存8位数,字单元保存16位数。
2.1
在80x86微机的输入/输出指令中,I/O端口号通常是由DX寄存器提供的,但有时也可以在指令中直接指定00~FFH的端口号。
试问可直接由指令指定的I/O端口数。
答:可直接由指令指定的I/O端口数为256个。
2.2 有两个16位字1EE5H和2A3CH分别存放在80x86微机的存储器的000B0H和000B3H单元中,请用图表示出它们在存储器里的存放情况。
答:存储器里的存放情况如右下图所示:
000B0H E5H
000B1H 1EH
000B2H
000B3H 3CH
000B4H 2AH
2.3在IBM PC机的存储器中存放信息如右下图所示。
试读出30022H和30024H字节单元的内容,以及30021H和30022H字单元的内容。
30020H 12H
30021H 34H
30022H ABH
30023H CDH
30024H EFH
答:30022H字节单元的内容为ABH;30024H字节单元的内容为EFH。
30021H字单元的内容为AB34H;30022H字单元的内容为CDABH。
2.4 在实模式下,段地址和偏移地址为3017:000A的存储单元的物理地址是什么?如果段地址和偏移地址是3015:002A和3010:007A呢?
答:3017:000A、3015:002A和3010:007A的存储单元的物理地址都是3017AH。
2.5 如果在一个程序开始执行以前(CS)=0A7F0H,(如16进制数的最高位为字母,则应在其前加一个0) (IP)=2B40H,试问该程序的第一个字的物理地址是多少?
答:该程序的第一个字的物理地址是0AAA40H。
2.6在实模式下,存储器中每一段最多可有10000H个字节。
如果用调试程序DEBUG的r命令在终端上显示出当前各寄存器的内容如下,请画出此时存储器分段的示意图,以及条件标志OF、SF、ZF、CF的值。
C>debug
-r
AX=0000 BX=0000 CX=0079 DX=0000 SP=FFEE BP=0000
SI=0000 DI=0000 DS=10E4 ES=10F4 SS=21F0 CS=31FF
IP=0100 NV UP DI PL NZ NA PO NC
答:此时存储器分段的示意图如右图所示。
OF、SF、ZF、CF的值都为0。
2.7 下列操作可使用那些寄存器?
(1) 加法和减法数据寄存器等
(2) 循环计数CX
(3) 乘法和除法AX、DX,乘数和除数用其他寄存器或存储器
(4) 保存段地址段寄存器
(5) 表示运算结果为0 ZF=1
(6) 将要执行的指令地址CS:IP
(7) 将要从堆栈取出数据的地址SS:SP
答:答案见题目的右边。
2.8 那些寄存器可以用来指示存储器地址?
答:BX、BP、SI、DI、堆栈操作时的SP、对应的段地址、386及其后继机型的Exx。
2.9 请将下列左边的项和右边的解释联系起来(把所选字母放在括号中):
(1) CPU (M) A.保存当前栈顶地址的寄存器。
(2) 存储器(C) B.指示下一条要执行的指令的地址。
(3) 堆栈(D) C.存储程序、数据等信息的记忆装置,微机有RAM和ROM两种。
(4) IP (B) D.以后进先出方式工作的存储空间。
(5) SP (A) E.把汇编语言程序翻译成机器语言程序的系统程序。
(6) 状态标志(L) F.唯一代表存储空间中每个字节单元的地址。
(7) 控制标志(K) G.能被计算机直接识别的语言。
(8) 段寄存器(J) H.用指令的助记符、符号地址、标号等符号书写程序的语言。
(9) 物理地址(F) I.把若干个模块连接起来成为可执行文件的系统程序。
(10) 汇编语言(H) J.保存各逻辑段的起始地址的寄存器,8086/8088机有四个:CS、DS、SS、ES。
(11) 机器语言(G) K.控制操作的标志,如DF位。
(12) 汇编程序(E) L.记录指令操作结果的标志,共6位:OF、SF、ZF、AF、PF、CF。
(13) 连接程序(I) M.分析、控制并执行指令的部件,由算术逻辑部件ALU和寄存器等组成。
(14) 指令(O) N.由汇编程序在汇编过程中执行的指令。
(15) 伪指令(N) O.告诉CPU要执行的操作(一般还要指出操作数地址),在程序运行时
执行。
答:答案见题目的括号中。