16。32位微机原理、汇编语言及接口技术(第二版)第三章课后习题答案。
- 格式:doc
- 大小:134.50 KB
- 文档页数:17
第二章2.5 1M=220 因为最小的一个段的大小为16个字节(一个小段),所以 最多有220/24=216(1) 0FFFFH:0 物理地址为 0FFFF0H(2) 40H:17H 物理地址为 400H+17H=417H(3) 2000H:4500H 物理地址为200000H+4500H=24500H(4) 0B821H:4567H 物理地址为 0B8210H+4567H=0BC777H2.9 (1) CX 16位 DL 8位 操作数宽度不一样(类型不一致)(2) IP 不能作为源操作数,也不能作为目的操作数(3) 立即数不能直接赋给段寄存器(4)段寄存器间不能直接赋值(5) 类型不一致,立即数300超过8位,不能赋给8位寄存器AL(6) 寄存器间接寻址方式不能使用sp 寄存器(7)+作为算术运算符,它的操作数为常量(8)20h 为立即数不能作为目的操作数2.12 (1) ADD DX, BX(2) ADD AL,BYTE PTR [BX+SI] 或ADD AL,BYTE PTR [BX][SI](3) ADD [BX+0B2H],CX(4)ADD WORD PTR [0520H],3412H(5)ADD AL,0A0H21203h 20100h20101h 20102h 20103h 21201h 21201h 21202h2.16(1)1256H (2)20A1H+1256H+20000H=232F7H又[232F7H]=3280H所以EA=3280H 2.17(1)当AX=1E1EH时(2)当AX的D7和D0位不同时为0时(3)无符号数cx<64H时3.9 (1) 67h (2) 133h (3) 230h (4)41h (5)7654H3.11(1) my1b db 'Personal Computer'(2) my2b db 20(3) my3b db 14h(4)my4b db 00010100B(5) my5w dw 20 dup (?)(6) my6c equ 100(7)my7c = 'Personal Computer'3.14109h 10ah 113h114hAX=114H AX=6AX=0DH AX=02H 100h。
汇编语言与接口技术叶继华(第二版)习题答案习题一解答: 1.3(1)[0.0000]原=0.0000[0.0000]反=0.0000[0.0000]补=0.0000(2)[0.1001]原=0.1001[0.1001]反=0.1001[0.1001]补=0.1001(3)[-1001]原=11001[-1001]反=10110[-1001]补=10111 1.4[N]反=1.0101 [N]原=1.1010[N]补=1.0110N=-0.1010 1.5(1)原码运算:比较可知,正数较大,用正数减负数,结果为正01010011-00110011=[01010011]原-[00110011]原=00100000反码运算:01010011-00110011=[01010011]反+[-00110011]反=001010011+111001100=000011111补码运算:01010011-00110011=[01010011]补+[-00110011]补=001010011+111001101=000100000 (2)原码运算:比较可知,负数较大,用负数减正数,结果为负0.100100-0.110010=[0.110010]原-[0.100100]原=-0.001110反码运算:0.100100-0.110010=[0.100100]反+[-0.110010]反=0.100100+ 1.001101=1.110001补码运算:0.100100-0.110010=[0.100100]补+[-0.110010]补=0.100100+1.001110=1.110010764310 1.6(1)(11011011)2=(1×2+1×2+1×2+1×2+1×2+1×2)10=(219)10=(001000011001)BCD(2)(456)10=(010*********)BCD210(3)(174)8=(1×8+7×8+4×8)10=(124)10=(000100100100)BCD210(4)(2DA)16=(2×16+13×16+10×16)10=(730)10=(011100110000)BCD 1.7(1)9876H看成有符号数时,默认为负数的补码,转换为十进制数是:-265069876H=1001100001110110B为负数的补码,对其求补得到正数的补码,即[1001100001110110B]补=0110011110001010B14131098731=(1×2+1×2+1×2+1×2+1×2 +1×2+1×2+1×2)10=26506所以原负数为-26506(2)9876H看成无符号数时,转换为十进制数是:39030151211654219876H=1001100001110110B=(1×2+1×2+1×2+1×2+1×2+1×2+1×2+1×2)10=39030 1.8(1)98的压缩BCD码为:10011000B(2)98的非压缩BCD码为:0000100100001000B 1.9(1)[S1+S2]补=[S1]补+[S2]补=00010110+00100001=00110111,无溢出[S1-S2]补=[S1]补+[-S2]补=00010110+11011111=11110101,无溢出(2)[S1+S2]补=[S1]补+[S2]补= 00010110+11011111=11110101,无溢出[S1-S2]补=[S1]补+[-S2]补=00010110+00100001=00110111,无溢出(3)[S1+S2]补=[S1]补+[S2]补= 01100100+00011110=10000010,有溢出[S1-S2]补=[S1]补+[-S2]补=01100100+11100010=01000110,无溢出(4)[S1+S2]补=[S1]补+[S2]补= 10011100+11100010=01111110,有溢出[S1-S2]补=[S1]补+[-S2]补=10011100+00011110=10111010,无溢出习题二解答: 2.1答:8086有哪些寄存器组?各有什么用途?①通用寄存器AX、BX、CX、DX它既可用作16位寄存器,又可将它拆成高、低8位,分别作为两个独立的8位寄存器使用。
习题 3.9(1)mov al, 23h and 45h or 67h;al=67h(2)mov ax, 1234h/16 + 10h;ax=0133h(3)mov ax, 23h shl 4;ax=0230h(4)mov al, ‘a’ and (not (‘a’-’A’));al=41h(5)mov ax, (76543 lt 32768) xor 7654h;ax=7654h习题 3.10(1)41h 42h 43h 0ah 10h 45h 46h ffh - 04h 04h 04h ffh - 04h 04h04h ffh - 04h 04h 04h(2)10h 00h fbh ffh - - - - - -习题 3.11(1)my1b db 'Personal Computer'(2)my2b db 20(3)my3b db 14h(4)my4b db 00010100b(5)my5w dw 20 dup(?)(6)my6c equ 100(7)my7c equ < Personal Computer >习题 3.14(1)offset varb = 0104h;offset mess = 0114h(2)type buff = 1;type mess = 1;type vard = 4(3)sizeof varw = 4;sizeof buff = 10;sizeof mess = 5(4)lengthof varw =2;lengthof vard = 1习题 3.15(1)mov byte ptr [bx],1000 ;1000超出了一个字节范围(2)mov bx,offset myword[si];OFFSET只能用于简单变量.寄存器的值只有程序执行时才能确定,而offset是汇编过程计算偏移地址,故无法确定,可以改为lea bx,myword[si](3)cmp mybyte1,mybyte2 ;两个都是存储单元,指令不允许(4)mov mybyte1,al+1 ;数值表达式应为运算符加常量,寄存器值只有执行时才能确定,汇编时无法计算(5)sub al,myword ;字节量AL与字量myword,类型不匹配(6)jnz myword ;Jcc指令只有相对短转移寻址方式,不支持间接寻址方式,间接寻址指指令代码中指示寄存器或存储单元,目的地址从寄存器或存储单元中取得习题 3.16.model small ;定义程序的存储模式.stack ;定义堆栈段.data ;定义数据段.codestart: mov ax,@data;程序段起点mov ds,ax ;设置DSmov ah,1 ;只允许输入小写字母int 21hsub al,20h ;转换为大写字母mov dl,almov ah,2int 21h ;显示mov ax,4c00hint 21hend start习题 3.17ASCTOH macrolocal asctoh1,asctoh2cmp al,'9'jbe asctoh1 ;;小于等于‘9’,说明是0~9,只需要减去30hcmp al,'a'jb asctoh2 ;;大于‘9’,小于‘a’,说明是A~F,还要减7sub al,20h ;;大于等于‘a’,说明是a~f,还要减20h asctoh2: sub al,7asctoh1: sub al,30hendm.model small ;定义程序的存储模式.stack ;定义堆栈段.data ;定义数据段LEDtable db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8hdb 80h,90h,88h,83h,0c6h,0c1h,86h,8ehdispmsg db 'input a number:$'crlf db 0dh,0ah,'$'lednum db ?.codestart: mov ax,@data;程序段起点mov ds,ax ;设置DSmov dx,offset dispmsgmov ah,09hint 21hmov ah,1int 21hasctohmov lednum,almov dx,offset crlfmov ah,09hint 21hmov bx,offset LEDtablemov al,lednumxlatmov bl,almov cl,4rol al,clcall htoascmov al,blcall htoascmov ax,4c00hint 21hHTOASC proc;子程序HTOASC:将al低4位表达的十六进制数转换为ASCII码push bxmov bx,offset ASCII ;bx指向ascii码表and al,0fh ;取得一位16进制数xlat CS:ASCII ;换码:AL←CS:[BX+AL]mov dl,almov ah,2int 21hpop bxret;数据区ASCII db 30h,31h,32h,33h,34h,35h,36h,37h,38h,39hdb 41h,42h,43h,44h,45h,46hHTOASC endpend start习题3.18mov al, bufXcmp al, bufYjae donemov al, bufYdone: mov bufZ, al习题3.19.;习题3.19.model small.stack.databufX dw -7signX db ?.codestart: mov ax,@datamov ds,axcmp bufX,0 ;test bufX,80hjl next ;jnz nextmov signX,0jmp donenext: mov signX,-1done: mov ax,4c00hint 21hend start习题3.20.;习题3.20.model small ;定义程序的存储模式.stack ;定义堆栈段.data ;定义数据段bufx dw -1bufy dw -1bufz dw -1.codestart: mov ax,@data;程序段起点mov ds,ax ;设置DSmov dl,'2'mov ax,bufxcmp ax,bufyje next1dec dlnext1: cmp ax,bufzje next2mov bx,bufycmp bx,bufzje next2dec dlnext2: mov ah,2int 21hmov ax,4c00hint 21hend start习题3.21.;数据段number db 78h ;实现假设的一个数值0111 1000B,D3为1addrs dw offset fun0,offset fun1,offset fun2,offset fun3dw offset fun4,offset fun5,offset fun6,offset fun7;取得各个处理程序开始的偏移地址.codestart: mov ax,@data;程序段起点mov ds,ax ;设置DSmov al,numbermov bx,0 ;BX←记录为1的位数mov dl,'?' ;处理数据为零的情况,显示?cmp number,0jnz restartmov ah,2int 21hjmp doneRestart: cmp al,0 ;AL=0结束jz doneagain: shr al,1 ;最低位右移进入CFjc next ;为1,转移inc bx ;不为1,继续,只在不为1的时候增加bx,所以后文补充jmp againnext: push axpush bxshl bx,1 ;位数乘以2(偏移地址要用2个字节单元)jmp addrs[bx] ;间接转移:IP←[table+BX];以下是各个处理程序段fun0: mov dl,'0'jmp dispfun1: mov dl,'1'jmp dispfun2: mov dl,'2'jmp dispfun3: mov dl,'3'jmp dispfun4: mov dl,'4'jmp dispfun5: mov dl,'5'jmp dispfun6: mov dl,'6'jmp dispfun7: mov dl,'7'jmp dispdisp: mov ah,2 ;显示一个字符int 21hpop bxpop axinc bx ;注意,即使Di位不为1,为记录确切的分支入口,仍然需要增加bxjmp restartdone: mov ax,4c00hint 21hend start习题3.22.model small ;定义程序的存储模式.stack ;定义堆栈段.data ;定义数据段b_data db 12h,45h,0f3h,6ah,20h,0feh,90h,0c8h,57h,34h ;原始数据num equ 10 ;数据个数sum db ? ;预留结果单元.codestart: mov ax,@data;程序段起点mov ds,ax ;设置DSxor si, si ;位移量清零xor al, al ;取第一个数mov cx, num ;累加次数again: add al, b_data[si] ;累加inc si ;指向下一个数loop again ;如未完,继续累加mov sum, al ;完了,存结果mov ax,4c00hint 21hend start习题3.23;xiti323,空格数目放在total中.model small ;定义程序的存储模式.stack ;定义堆栈段.data ;定义数据段total dw ?wtemp dw ? ;是writ子程序的入口参数.codestart: mov ax,0040h ;送段地址mov ds, axmov si, 0 ;偏移地址mov cx, si ;计数(循环次数)xor ax, ax;空格计数器清零again: cmp byte ptr [si], 20h ;与空格的ASCII码比较jne next ;不是空格,转inc ax ;是空格,空格数加1next: inc si ;修改地址指针loop again ;cx=cx-1,如cx=0 退出循环mov total,ax ;total中放空格数mov ax,totalmov wtemp,axcall writemov ax,4c00hint 21hwrite proc ;显示有符号10进制数的通用子程序write push ax ;入口参数:共享变量wtemppush bxpush dxmov ax,wtemp ;取出显示数据test ax,ax ;判断数据是0,正数还是负数jnz write1mov dl,'0' ;是0,显示“0”后退出mov ah,2int 21hjmp write5write1: jns write2 ;是负数,显示“-“mov bx,ax ;ax中数据暂存于bx,因为要用dos调用mov dl,'-'mov ah,2int 21hmov ax,bxneg ax ;数据求补(绝对值)write2: mov bx,10push bx ;10压入堆栈,作为推出标志write3: cmp ax,0 ;数据(商)为0,转向显示jz write4sub dx,dx ;扩展被除数dx.axdiv bx ;数据除以10,dx.ax/10,商送ax,余数送dxadd dl,30h ;余数(0~9)转换为ascii码push dx ;数据各位按照先低位后高位依次压入堆栈jmp write3write4: pop dx ;数据各位按照先高位后低位依次弹出堆栈cmp dl,10 ;判断是否结束,标志为10je write5mov ah,2 ;显示int 21hjmp write4write5: pop dxpop bxpop axretwrite endpdpcrlf proc ;使光标回车换行的子程序push axpush dxmov ah,2mov dl,0dhint 21hmov ah,2mov dl,0ahint 21hpop dxpop axretdpcrlf endpend start习题3.24;数据段count equ 100parray dw count dup(?) ;假设有100个数据wordsum dw 0msg db ‘overflow’,’$’;代码段mov cx,countmov ax,0mov bx,offset parrayagain: add ax,[bx]jnc nextmov dx,offset msgmov ah,9int 21h ;显示溢出信息jmp done ;然后,跳出循环体next: add bx,2loop againmov wordsum,axdone: mov ax,4c00hint 21h习题3.25;xiti325.asm;编程把—个16位无符号二进制数转换成为用8421BCD码表示的5位十进制数。
《微机原理及接口技术》(第2版)―习题解答《16/32位微机原理、汇编语言及接口技术・第2版》习题解答1第1章微处理器指令系统〔习题1.1〕微型计算机到目前为止已发展了几代?给出各代微机的特点和典型的微处理器。
〔解答〕〔习题1.2〕什么是微型计算机?PC机、单片机和数字信号处理器的含义各是什么?〔解答〕?微型计算机:以大规模、超大规模集成电路为主要部件,以集成了计算机主要部件――控制器和运算器的微处理器为核心,所构造出的计算机系统?PC机:PC(Personal Computer)机就是面向个人单独使用的一类微机?单片机:用于控制的微处理器芯片,内部除CPU外还集成了计算机的其他一些主要部件,如:ROM、RAM、定时器、并行接口、串行接口,有的芯片还集成了A/D、D/A转换电路等。
?数字信号处理器DSP:主要面向大流量数字信号的实时处理,在宿主系统中充当数据处理中心,在网络通信、多媒体应用等领域正得到越来越多的应用〔习题1.3〕微型计算机主要由哪些基本部件组成?各部件的主要功能是什么?〔解答〕CPU:存储器:外部设备:〔习题1.4〕什么是微机的系统总线?微机的总线结构为它带来了哪些好处?除电源和地线外,一般将总线分为哪3组信号?总线的使用特点是什么?〔解答〕?系统总线:传递信息的一组公用导线,CPU通过它们与存储器和I/O设备进行信息交换?好处:组态灵活、扩展方便?三组信号线:数据总线、地址总线和控制总线?其使用特点是:在某一时刻,只能由一个总线主控设备来控制系统总线,只能有一个发送者向总线发送信号;但可以有多个设备从总线上同时获得信号。
2〔习题1.5〕简述微型计算机的两个主要应用方向及其应用特点。
〔解答〕?用于数值计算、数据处理及信息管理方向?采用通用微机,要求有较快的工作速度、较高的运算精度、较大的内存容量和较完备的输入输出设备,为用户提供方便友好的操作界面和简便快捷的维护、扩充手段。
?用于过程控制及嵌人应用方向?采用控制类微机,要求能抵抗各种干扰、适应现场的恶劣环境、确保长时间稳定地工作,要求其实时性要好、强调其体积要小、便携式应用强调其省电。
微机原理与接口技术(第二版)课后习题答案微机原理与接口技术(第二版)课后题答案第1章作业答案1.1 微处理器、微型计算机和微型计算机系统的区别是什么?微处理器是将CPU集成在一个芯片上,微型计算机是由微处理器、存储器和外部设备构成,而微型计算机系统则是微型计算机与管理、维护计算机硬件以及支持应用的软件相结合的系统。
1.2 CPU的内部结构由哪些部分组成?它应该具备哪些主要功能?CPU主要由算术逻辑单元、指令寄存器、指令译码器、可编程逻辑阵列和标志寄存器等寄存器组成。
它的主要功能是进行算术和逻辑运算以及控制计算机按照程序的规定自动运行。
1.3 采用总线结构的微型计算机有哪些优点?采用总线结构可以扩大数据传送的灵活性,减少连线。
此外,总线可以标准化,易于兼容和工业化生产。
1.4 数据总线和地址总线在结构上有什么不同?如果一个系统的数据和地址合用一套总线或者合用部分总线,那么要靠什么来区分地址和数据?数据总线是双向的,而地址总线是单向的。
如果一个系统的数据和地址合用一套总线或者部分总线,就要靠信号的时序来区分。
通常在读写数据时,总是先输出地址,过一段时间再读或写数据。
1.8 给定一个模型,如何用累加器实现15×15的程序?LD A。
15LD H。
15LOOP: ADD A。
15DEC HJP NZ。
LOOPHALT第2章作业答案2.1 IA-32结构微处理器直至Pentium 4,有哪几种?IA-32结构微处理器有、、Pentium、Pentium Pro、Pentium II、Pentium III和Pentium 4.2.6 IA-32结构微处理器有哪几种操作模式?IA-32结构支持保护模式、实地址模式和系统管理模式三种操作模式。
操作模式决定了哪些指令和结构特性可以访问。
2.8 IA-32结构微处理器的地址空间是如何形成的?由段寄存器确定的段基地址与各种寻址方式确定的有效地址相加形成了线性地址。
微计算机原理(第2版)第三章课后习题答案解析讲课讲稿微计算机原理(第2版)第三章课后习题答案解析第三章 80x86 指令系统3-1 指令由操作码字段和操作数字段组成。
8086的指令长度在1~6字节范围。
3-2 分别指出下列指令中源操作数和目的操作数的寻址方式。
若是存储器寻址,使用表达式表示出EA=? PA=?(1) MOV SI, 2100H (2) MOV CX, DISP[BX] (3) MOV [SI], AX (4) ADC ZX, [BX][SI] (5) AND AX, DX (6) MOV AX,[BX+10H](7) MOV AX, ES:[BX] (8)MOV AX, [BX+SI+20H] (9) MOV [BP], CX (10) PUSH DS解:3-3 已知8086中一些寄存器的内容和一些存储器单元的内容如图3-1所示,试指出下列各条指令执行后,AX中的内容。
(1)MOV AX, 2010H (2) MOV AX, BX (3) MOV AX, [1200H](4)MOV AX, [BX] (5) MOV AX, 1100H[BX] (6) MOV AX, [BX][SI](7)MOV AX, 1100H[BX+SI] (8) MOVLEA AX, [SI]解:(1)(AX)=2010H (2)(AX)=0100H (3)(AX)=4C2AH (4)(AX)=3412H(5)(AX)=4C2AH (6)(AX)=7856H (7)(AX)=65B7H (8)(AX)=0002H图3-1 3-4 已知(AX)=2040H,(DX)=380H,端口(PORT)=(80H)=1FH,(PORT+1)=45H,执行下列指令后,指出结果等于多少?解:(1)OUT DX, AL (0380H)=40H(2)OUT DX, AX (380H)=40H (381h)=20H(3)IN AL, PORT (AL)=1FH(4)IN AX, 80H (AX)=451FH(5)OUT PORT1, AL (PORT1)=40H(6)OUT PORT1, AX (PORT1)=2040H3-5 已知:(SS)=0A2F0H,(SP)=00C0H,(AX)=8B31H,(CX)=0F213,试画出下列指令执行到位置1和位置2时堆栈区和SP指针内容的变化示意图。
《16/32 位微机原理、汇编语言及接口技术教程》部分习题参考解答第1 章微型计算机系统概述〔习题1.2 〕什么是通用微处理器、单片机(微控制器)、芯片、嵌入式系统?〔解答〕通用微处理器:适合较广的应用领域的微处理器,例如装在机、笔记本电脑、工作站、服务器上的微处理器。
单片机:是指通常用于控制领域的微处理器芯片,其内部除外还集成了计算机的其他一些主要部件,只需配上少量的外部电路和设备,就可以构成具体的应用系统。
芯片:称数字信号处理器,也是一种微控制器,其更适合处理高速的数字信号,内部集成有高速乘法器,能够进行快速乘法和加法运算。
嵌入式系统:利用微控制器、数字信号处理器或通用微处理器,结合具体应用构成的控制系统,其典型的特点是把计算机直接嵌入到应用系统之中。
〔习题1.5 〕说明微型计算机系统的硬件组成及各部分作用。
〔解答〕:也称处理器,是微机的核心。
它采用大规模集成电路芯片,芯片内集成了控制器、运算器和若干高速存储单元(即寄存器)处理器及其支持电路构成了微机系统的控制中心,对系统的各个部件进行统一的协调和控制。
存储器:存储器是存放程序和数据的部件。
外部设备:外部设备是指可与微机进行交互的输入()设备和输出()设备,也称设备。
设备通过接口与主机连接。
总线:互连各个部件的共用通道,主要含数据总线、地址总线和控制总线信号。
习题1.6 〕什么是总线?微机总线通常有哪3 组信号?各组信号的作用是什么?〔解答〕总线:传递信息的共用通道,物理上是一组公用导线。
3 组信号线:数据总线、地址总线和控制总线。
(1)地址总线:传输将要访问的主存单元或端口的地址信息。
(2)数据总线:传输读写操作的数据信息。
(3)控制总线:协调系统中各部件的操作。
习题1.7 〕简答如下概念:(1)计算机字长(2)取指-译码-执行周期(3)(4)中断(5)总线解答〕(1)处理器每个单位时间可以处理的二进制数据位数称计算机字长。
(2)指令的处理过程,即指处理器从主存储器读取指令(简称取指),翻译指令代码的功能(简称译码),然后执行指令所规定的操作(简称执行)的过程。
微机原理第一章1.1 解:五代,详细见书1.2 解:微型计算机:以大规模、超大规模集成电路为主要部件,以集成了计算机主要部件——控制器和运算器的微处理器为核心,所构造出的计算机系统。
PC机:PC(Personal Computer)机就是面向个人单独使用的一类微机。
单片机:用于控制的微处理器芯片,内部除CPU外还集成了计算机的其他一些主要部件,如:ROM、RAM、定时器、并行接口、串行接口,有的芯片还集成了A/D、D/A转换电路等。
数字信号处理器DSP:主要面向大流量数字信号的实时处理,在宿主系统中充当数据处理中心,在网络通信、多媒体应用等领域正得到越来越多的应用1.3 解:微机主要有存储器、I/O设备和I/O接口、CPU、系统总线、操作系统和应用软件组成,各部分功能如下:CPU:统一协调和控制系统中的各个部件系统总线:传送信息存储器:存放程序和数据I/O设备:实现微机的输入输出功能I/O接口:I/O设备与CPU的桥梁操作系统:管理系统所有的软硬件资源1.4 解:系统总线:传递信息的一组公用导线,CPU通过它们与存储器和I/O设备进行信息交换。
好处:组态灵活、扩展方便三组信号线:数据总线、地址总线和控制总线。
其使用特点是:在某一时刻,只能由一个总线主控设备来控制系统总线,只能有一个发送者向总线发送信号;但可以有多个设备从总线上同时获得信号。
1.5解:(1)用于数值计算、数据处理及信息管理方向。
采用通用微机,要求有较快的工作速度、较高的运算精度、较大的内存容量和较完备的输入输出设备,为用户提供方便友好的操作界面和简便快捷的维护、扩充手段。
(2)用于过程控制及嵌人应用方向。
采用控制类微机,要求能抵抗各种干扰、适应现场的恶劣环境、确保长时间稳定地工作,要求其实时性要好、强调其体积要小、便携式应用强调其省电。
1.6 解:1.7 解:I/O通道:位于CPU和设备控制器之间,其目的是承担一些原来由CPU处理的I/O任务,从而把CPU从繁杂的I/O任务中解脱出来。
>第3章3.1:汇编语言有什么特点解:汇编语言是一种以处理器指令系统为基础的低级程序设计语言,它采用助记符表达指令操作码,采用标识符号表示指令操作数,可以直接、有效地控制计算机硬件,因而容易创建代码序列短小、运行快速的可执行程序3.2编写汇编语言源程序时,一般的组成原则是什么?解:(1)完整的汇编语言源程序由段组成(2)一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间的顺序可随意排列(3)需独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点(4)所有的可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任一段内(5)通常,程序还需要一个堆栈段3.3 MODEL伪指令是简化段定义源程序格式中必不可少的语句,它设计了哪7种存储模式?各用于创建什么性质的程序?解:3.4如何规定一个程序执行的开始位置,主程序执行结束应该如何返回DOS,源程序在何处停止汇编过程?解:开始位置:用标号指明返回DOS:利用DOS功能调用的4CH子功能来实现汇编停止:执行到一条END伪指令时,停止汇编3.5逻辑段具有哪些属性?解:段定位、段组合和段类型。
3.6给出采用一个源程序格式书写的例题3.1源程序例题3.1:创建一个在屏幕上显示一段信息的程序……解:stack segment stackdb 1024(0)stack endsdata segmentstring db 'Hello,Assembly!',0dH,0aH,‘$’data endscode segment 'code'assume cs:code,ds:data,ss:stackstart: mov dx,offset stringmov ah,9int 21hcode endsend start3.7DOS支持哪两种可执行程序结构,编写这两种程序时需要注意什么?解:(1). EXE程序程序可以有多个代码段和多个数据段,程序长度可以超过64KB通常生成EXE结构的可执行程序(2). COM程序只有一个逻辑段,程序长度不超过64KB需要满足一定条件才能生成COM结构的可执行程序(MASM 6.x需要采用TINY模式)3.8举例说明等价“EUQ”伪指令和等号“=”伪指令的用途解:符号定义伪指令有“等价EQU”和“等号=”:符号名 EQU 数值表达式符号名 EQU <字符串>符号名=数值表达式EQU用于数值等价时不能重复定义符号名,但“=”允许有重复赋值。
>第3章3.1:汇编语言有什么特点解:汇编语言是一种以处理器指令系统为基础的低级程序设计语言,它采用助记符表达指令操作码,采用标识符号表示指令操作数,可以直接、有效地控制计算机硬件,因而容易创建代码序列短小、运行快速的可执行程序3.2编写汇编语言源程序时,一般的组成原则是什么?解:(1)完整的汇编语言源程序由段组成(2)一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间的顺序可随意排列(3)需独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点(4)所有的可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任一段内(5)通常,程序还需要一个堆栈段3.3 MODEL伪指令是简化段定义源程序格式中必不可少的语句,它设计了哪7种存储模式?各用于创建什么性质的程序?解:3.4如何规定一个程序执行的开始位置,主程序执行结束应该如何返回DOS,源程序在何处停止汇编过程?解:开始位置:用标号指明返回DOS:利用DOS功能调用的4CH子功能来实现汇编停止:执行到一条END伪指令时,停止汇编3.5逻辑段具有哪些属性?解:段定位、段组合和段类型。
3.6给出采用一个源程序格式书写的例题3.1源程序例题3.1:创建一个在屏幕上显示一段信息的程序……解:stack segment stackdb 1024(0)stack endsdata segmentstring db 'Hello,Assembly!',0dH,0aH,‘$’data endscode segment 'code'assume cs:code,ds:data,ss:stackstart: mov dx,offset stringmov ah,9int 21hcode endsend start3.7DOS支持哪两种可执行程序结构,编写这两种程序时需要注意什么?解:(1). EXE程序程序可以有多个代码段和多个数据段,程序长度可以超过64KB通常生成EXE结构的可执行程序(2). COM程序只有一个逻辑段,程序长度不超过64KB需要满足一定条件才能生成COM结构的可执行程序(MASM 6.x需要采用TINY模式)3.8举例说明等价“EUQ”伪指令和等号“=”伪指令的用途解:符号定义伪指令有“等价EQU”和“等号=”:符号名 EQU 数值表达式符号名 EQU <字符串>符号名=数值表达式EQU用于数值等价时不能重复定义符号名,但“=”允许有重复赋值。
例如:X= 7 ;等效于:X equ 7X= X+5 ;“X EQU X+5”是错误的3.9 给出下列语句中,指令立即数(数值表达式)的值(1)mov al,23h AND 45h OR 67h(2)mov ax,1234h/16+10h3:mov ax,23h SHL 44:mov al, ‘a’and(NOT(‘a’-‘A’))5:mov ax,(76543 LT 32768) XOR 7654h解:(1) al=67h(2) ax=133h,dx=4h(3) ax=0230h(4) al=41h(4) ax=7654h3.10画图说明下列语句分配的存储空间及初始化的数据值(1)byte_var db ‘abc’,10,10h,‘EF’,3 dup(-1,?,3,dup(4))(2:)word_var dw 10h,-5,3,dup(?)解:3.11请设置一个数据段,按照如下要求定义变量:(1)my1b为字符串常量,表示字符串“personal Computer”(2)my2b为用十进制数表示的字节变量,这个数的大小为20(3)my3b为用十六进制数表示的字节变量,这个数的大小为20(4)my4b为用二进制数表示的字节变量,这个数的大小为20(5)my5w为20个未赋值的字变量(6)my6c为100的符号常量(7)my7c为字符串常量,代替字符串“personal Computer”解:.datamy1b db 'Personal Computer'my2b db 20my3b db 14hmy4b db 00010100bmy5w dw 20 dup(?)my6c = 100my7c = <'Personal Computer'>3.12 希望控制变量或程序代码在段中的偏移地址,应该使用哪个伪指令?解:利用定位伪指令控制,如org,even,align3.13名字和符号有什么属性?解:包括逻辑地址和类型两种属性。
3.14设在某个程序中有如下片段,请写出每条传送指令执行后寄存器AX的内容:;数据段Org 100hVarw dw 1234h,5678hVarb db 3,4Vard dd 12345678hBuff db 10 dup(?)Mess db ‘hello’;代码段Mov ax,offset messMov ax,type buff+type mess+type vardMov ax,sizeof varw+sizeof buff+sizeof messMov ax,lengthof varw+lengthof vard解:;数据段org 100hvarw dw 1234h , 5678hvarb db 3 , 4vard dd 12345678hbuff dd 10 dup(?)mess db 'Hello';代码段mov ax , offset varb + offset messmov ax , type buff + type mess + type vardmov ax , sizeof varw+ sizeof buff+ sizeof messmov ax , lengthof varw+ lengthof vard3.15假设myword是一个字变量,mybyte1和mybyte2是两个字节变量,指出下列语句中的具体错误原因。
(1)mov byte ptr {bx},1000(2)mov bx,offset myword{si}(3)cmp mybyte1,mybyte2(4)mov mybyte1,al+1(5)sub al,myword(6)jnz myword解:(1) 1000超过一个字节所能表达的最大整数(2)SI应为偶数(3)两个内存单元不能直接运算(4)应改为[al+1](5)条件转移指令后面应接标号,而不是变量3.16编写一个程序,把从键盘输入的一个小写字母用大写字母显示出来解:mov ah,1 ;只允许输入小写字母int 21hsub al,20h ;转换为大写字母mov dl,almov ah,2int 21h ;显示3.17 已知用于LED数码管的显示代码表为:LEDtable db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8hdb 80h,90h,88h,83h,0c6h,0c1h,86h,8eh它依次表示0~9,A~F这16个数码的显示代码。
现编写一个程序实现将lednum中的一个数字(0~9,a~f)转换成对应的LED显示代码解:mov bx,offset LEDtablemov al,lednumxlat3.18 编制一个程序,把变量bufX和bufY中较大者存入bufZ;若两者相等,则把其中之一存入bufZ中。
假设变量存放的是8位有符号数。
解:mov ax, bufXcmp ax, bufYjae donemov ax, bufYdone: mov bufZ, ax3.19为有符号16位数,请将它们的符号状态保存在signX,即:如果变量值大于等于0,保存0;如果X小于0,保存-1。
编写该程序。
设变量bufX 解:.model small.stack.databufX dw -7signX db ?.code.startupcmp bufX,0 ;test bufX,80hjl next ;jnz nextmov signX,0jmp donenext: mov signX,-1done: .exit 0end3.20bufX、bufY 和bufZ是3个有符号16进制数,编写一个比较相等关系的程序(1)如果这3个数都不相等,则显示0(2)如果这三个数中有两个数相等,则显示1(3)如果这三个数都相等,则显示2解:mov dl,’2’mov ax,bufXcmp ax,bufYje next1dec dlnext1: cmp ax,bufZje next2dec dlnext2: mov ah,2int 21h3.21 例3.7中,如果要实现所有为1的位都顺序执行相应的处理程序段(而不是例题中仅执行最低为1位的处理程序段),请写出修改后的代码段?解:;代码段mov al,numbermov bx,0 ;BX←记录为1的位数restart: cmp al,0 ;AL=0结束jz doneagain: shr al,1 ;最低位右移进入CFjc next ;为1,转移inc bx ;不为1,继续jmp againnext: push axpush bxshl bx,1 ;位数乘以2(偏移地址要用2个字节单元)jmp addrs[bx] ;间接转移:IP←[table+BX];以下是各个处理程序段fun0: mov dl,'0'jmp dispfun1: mov dl,'1'jmp dispfun2: mov dl,'2'jmp dispfun3: mov dl,'3'jmp dispfun4: mov dl,'4'jmp dispfun5: mov dl,'5'jmp dispfun6: mov dl,'6'jmp dispfun7: mov dl,'7'jmp disp;disp: mov ah,2 ;显示一个字符int 21hpop bxpop axjmp restartdone: …3.22编制程序完成12H、45H、0F3H、6AH、20H、0FEH、90H、0C8H、57H和34H等10个字节数据之和,并将结果存入字节变量SUM中(不考虑溢出和进位)。
;wjxt322.asm.model small.stack.datab_data db 12h,45h,0f3h,6ah,20h,0feh,90h,0c8h,57h,34h ;原始数据num equ 10 ;数据个数sum db ? ;预留结果单元.code.startupxor si, si ;位移量清零xor al, al ;取第一个数mov cx, num ;累加次数again: add al, b_data[si] ;累加inc si ;指向下一个数loop again ;如未完,继续累加mov sum, al ;完了,存结果.exit 0end3.23 求主存0040h:0开始的一个64KB物理段中共有多少个空格?; wjxt323.asm.model small.codestart: mov ax,0040h ;送段地址mov ds, axmov si, 0 ;偏移地址mov cx, si ;计数(循环次数)xor ax, ax ;空格计数器清零again: cmp byte ptr [si], 20h ;与空格的ASCII码比较jne next ;不是空格,转inc ax ;是空格,空格数加1next: inc si ;修改地址指针loop again ;cx=cx-1,如cx=0 退出循环.exit 0end start3.24 编写计算100个16位正整数之和的程序。