《汇编语言》王爽(第二版)第14章 端口
- 格式:ppt
- 大小:283.50 KB
- 文档页数:40
assume cs:code,ds:data,es:info_numdata segmentdb '11/11/11 11:11:11$' ;预设字符串data endsinfo_num segmentdb 9,8,7,4,2,0 ;端口时间地址列表info_num endscode segmentstart:mov ax,datamov ds,axmov si,0 ;初始指向字符串首mov ax,info_nummov es,axmov bp,0 ;指向端口时间地址列表首mov cx,6s:push cxmov al,es:[bp]out 70h,alin al,71hmov ah,al ;暂存almov cl,4shr ah,cl ;获取BCD码高四位and al,00001111B ;获取BCD码低四位add al,30hadd ah,30hmov ds:[si],ahmov ds:[si+1],al ;将时间信息写入字符串指定位置add si,3 ;指向字符串下一写入位置inc bp ;指向端口时间地址列表下一位置pop cxloop smov ah,2mov bh,0mov dh,12mov dl,50int 10h ;调用系统BIOS中断例程设置光标位置mov ah,9mov dx,0 ;指向字符串首int 21h ;调用DOS中断例程显示字符串mov ah,2mov bh,0mov dh,24mov dl,0int 10h ;开始没有这一段,其他并没有问题,就是发现调用21h例程后光标位置直接在字符串的下一行;通过这一段重置光标位置mov ax,4c00hint 21hcode endsend start。
汇编语言王爽第三版检测点答案带目录在学习汇编语言的过程中,王爽老师的《汇编语言(第三版)》无疑是一本备受推崇的经典教材。
而对于学习者来说,检测点的答案能够帮助我们更好地巩固知识,查漏补缺。
接下来,我将为大家详细呈现这本教材中各个章节检测点的答案,并附上清晰的目录,方便大家查阅和学习。
第一章基础知识检测点 11(1)1 个 CPU 的寻址能力为 8KB,那么它的地址总线的宽度为。
答案:13 位。
因为 8KB = 8×1024 = 2^13B,所以地址总线的宽度为 13 位。
检测点 12(1)8086 CPU 有根数据总线。
答案:16 根。
(2)8086 CPU 有根地址总线。
答案:20 根。
检测点 13(1)内存地址空间的大小受的位数决定。
答案:地址总线。
(2)8086 CPU 的地址总线宽度为 20 位,其可以寻址的内存空间为。
答案:1MB。
因为 2^20 = 1048576B = 1MB。
第二章寄存器检测点 21(1)写出每条汇编指令执行后相关寄存器中的值。
mov ax,62627 AX = 62627mov ah,31H AH = 31H,AX = 31627mov al,23H AL = 23H,AX = 3123H检测点 22(1)给定段地址为 0001H,仅通过变化偏移地址寻址,CPU 的寻址范围为到。
答案:00010H 到 1000FH。
(2)有一数据存放在内存 20000H 单元中,现给定段地址为 SA,若想用偏移地址寻到此单元。
则 SA 应满足的条件是:最小为,最大为。
答案:最小为 1001H,最大为 2000H。
第三章内存访问检测点 31(1)下面的程序实现依次用内存 0:0~0:15 单元中的内容改写程序中的数据。
完成程序。
assume cs:codesgcodesg segmentdw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987Hstart: mov ax,0mov ds,axmov bx,0mov cx,8s: mov ax,bxmov bx+16,axadd bx,2loop smov ax,4c00hint 21hcodesg endsend start检测点 32(1)下面的程序将“Mov ax,4c00h ”之前的指令复制到内存 0:200 处。
第一章:1.一个存储器有若干个存储单元,一个存储单元可以存储一个B,及一个字节,及8个二进制位,及8个b(比特)2.一个cpu有N根地址线,则可以说这个cpu的地址总线的宽度为N。
这样的cpu最多可以寻找2的N次个内存单元。
3.数据总线中如8根总线一次可以传送一个字节即8b,1B,十六根则是两个字节16b,2B第二章:1. 8086cpu的寄存器都是十六位的,可以存放两个字节,AX,BX,CX,DX,这四个是通用寄存器,通常用来存放一般的数据。
2. 字等于两个字节,即字=2B3. 一个数据的二进制形式左移1位,相当于该数据乘以2;一个数据的二进制形式左移N 位,相当于该数据乘以2的N次方;同理X进制左移N位,相当于该数据乘以X的N次方4. 偏移地址为16位,所以16位地址的寻址能力为64KB,所以一个段的长度最大为64KB5. cs和ip寄存器是cpu每时每刻所要执行的指向6. jmp 段地址:偏移地址是直接跳而jmp 某一寄存器是修改其中的ip7. 用E命令向内存中写入机器码,用U命令查看内存中机器码的含义,用T命令执行内存中的机器码,用A命令以汇编指令的形式在内存中写入机器指令第三章:1. DS和[ ] , DS是段寄存器DS中储存的是段地址,而[ ] 中储存的是偏移地址Mvo 内存单元地址,寄存器也是可以的2.栈是一种具有特殊的访问方式的储存空间,他的的特殊性就在于,最后进入这个空间的数据,最先出去3.push pop ,后面跟寄存器,入栈和出栈都是以字为单位进行的4.段寄存器SS和寄存器SP,栈顶的段地址存放在SS中,偏移地址存放在sp中,任意时刻,ss:sp指向栈顶元素,入栈时是从高地址向低地址方向进行第五章:1. [bx]同样也是表示一个内存单元,只是它的偏移地址在bx中,段地址还是在段寄存器中2. 注意() 表示括号内的内容,()中的元素可以有三种类型:寄存器,段寄存器名,内存单元的物理地址3. idata表示常量24. cpu执行loop指令的时候,要进行两步操作,第一是(cx)=(cx)-1,第二是判断cx中的值,不为零则转至标号处执行,如果为零则向下执行5. debug 中g 命令是转跳作用,一下子跳到预定的地方;p命令是把循环一次执行完6. 编程中要这样连用ds:[idata],ds:[寄存器],当然[寄存器+idata]也是可以的,同理[寄存器+si或di]也是可以的,前面那个里面两个顺序可以换,还可以这样写: idata[寄存器] [寄存器].idata,后面那个还可以这样写[寄存器][寄存器], [寄存器+idata+si或di],注意没有[寄存器+寄存器]这种类型7. 0:200~0:2ff, 00200h~002ffh的256个字节是安全的第七章:1. and or 是或,与命令2. si和di是8086cpu中和bx功能相近的寄存器,si和di不能分成两个8位的寄存器来使用第八章:1. 只有四个寄存器能在[ ] 中使用,就是bx,si,di,bp,而bx,bp不能同时出现,si,di也不能同时出现2. 只要[ ] 中使用寄存器bp,而指令中没有显性的给出段地址,段地址就默认在ss中3. 在没有寄存器存在的情况下,用操作符X ptr指明内存单元的长度,X在汇编指令中可以为word或byte 例如:mov word ptr ds:[0],1 push pop 命令只进行字操作4.div 除法指令如下图所示:db 定义字节型数据dw定义字型数据dd是用来定义双字型数据的,dup是用来进行数据的重复,也就是复制,比如:db 3 dup (0,1,2) 是定义了0 1 2 0 1 2 0 1 2 九个字节5. 操作符offset在汇编语言中是汇编器处理的符号,它的功能是取得标号的偏移地址,比如:p187第九章:1. jcxz 标号如果cx=0,则转移到标号处执行,当cx不等于0,则什么也不做,它是短转移2. loop 标号cx=cx-1 如果cx不等于0 转移到标号处执行,就是s loop s循环3. ret指令用栈中的数据修改ip的内容,从而实现近转移,retf指令用栈中的数据,修改cs和ip的内容,从而实现远转移所以ret相当于:pop ipRetf相当于:pop ipPop cs5.cpu执行call指令的时候,进行两步操作,第一将当前的ip或cs和ip压入栈中;第二是转移。
第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. 汇编指令是机器指令的助记符,同机器指令一一对应。
2. 每一种CPU都有自己的汇编指令集。
汇编语言发展至今,由以下三类指令组成:1汇编指令:机器码的助记符,有对应的机器码;2伪指令:没有对应的机器码,由编译器执行,计算机并不执行;3其他符号:如:+,--,*,/等,由编译器识别,没有对应的机器码。
3. CPU可以直接使用的信息在存储器中存放。
4. 在存储器中指令和数据没有任何区别,都是二进制信息。
5. 存储单元从零开始顺序编号。
6. 一个存储单元可以存储8个bit(用作单位写为“b”),即8位二进制数7. 1B=8b 1KB=1024b 1MB=1024KB 1GB=1024MB 1TB=1024GB8. 每一个CPU芯片都有许多管脚,这些管脚和总线相连,也可以说这些管脚引出总线。
一个CPU可以引出总线的宽度标志了这个CPU的不同方面的性能:V地址总线的宽度决定了CPU的寻址能力;Vv数据总线的宽度决定了CPU与其他器件进行数据传送时的一次数据传送量;Vvv控制总线的宽度决定了CPU对系统中其他器件的控制能力;9. 在每一台PC机中,都有一个主板,主板上有核心器件和一些主要器件,这些器件通过总线相连。
这些器件有:CPU,存储器,外围芯片组,扩展插槽等。
扩展插槽上一般插有RAM内存条和各类接口卡。
10. CPU对外部设备都不能直接控制,直接控制这些设备进行工作的是插在扩展插槽上的接口卡。
扩展插槽通过总线和CPU相连,所以接口卡液通过总线同CPU相连。
即CPU通过总线向接口卡发送命令,接口卡根据CPU的命令控制外设进行工作。
11. 随机存储器RAM,可读可写,但是必须带电存储,关机后存储的内容丢失;只读存储器ROM,只能读取不能写入,关机后其中的内容不丢失。
存储器从功能和连接上分为:* 随机存储器:用于存放供CPU使用的绝大部分程序和数据,主随机存储器一般由装在主板上的RAM和插在扩展插槽上的RAM组成。
第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。
《汇编语言》学习笔记(清华大学王爽)清华大学《汇编语言》(王爽)读书笔记第一章基础知识◎汇编语言由3类指令组成汇编指令:机器码的助记符,有对应机器码。
伪指令:没有对应机器码,由编译器执行,计算机并不执行其他符号:如+-*/,由编译器识别,没有对应机器码◎一个CPU有n根地址线,则可以所这个CPU的地址线宽度为n,这样的CPU最多可以寻找2的n 次方个内存单元。
◎ 1K=2^10B 1M=2^20B 1G=2^30B◎8086 CPU地址总线宽度为20,寻址范围为00000~FFFFF00000~9FFFF 主存储器地址空间(RAM)A0000~BFFFF 显存地址空间C0000~FFFFF 各类ROM地址空间第二章寄存器(CPU工作原理)◎16位结构描述了一个CPU具有下面几个方面的结构特性运算器一次最多可以处理16位的数据寄存器的最大宽度为16位寄存器和运算器之间的通路为16位◎8086有20位地址总线,可以传送20位地址,达到1M的寻址能力。
采用在内部用两个16位地址合成的方法来形成一个20位的物理地址◎物理地址 = 段地址× 16 + 偏移地址◎在编程是可以根据需要,将若干地址连续的内存单元看作一个段,用段地址×16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元。
段地址×16必然是16的倍数,所以一个段的起始地址也一定是16的倍数;偏移地址位16位,16位地址的寻址能力为64KB,所以一个段的长度最大为64KB◎8086有四个段寄存器 CS、DS、SS、ES◎CS为代码段寄存器,IP为指令指针寄存器。
任意时刻,设CS中内容为M、IP中内容为N,8086CPU从内存M×16+N读取一条指令执行◎不能用mov修改CS、IP,因为8086CPU没有提供这样功能,可用指令JMP 段地址:偏移地址。
JMP 2AE3:3 JMP AX 修改IP 第三章寄存器(内存访问)◎DS数据段寄存器。