




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第一章 1.1 cpu 分析、控制并执行指令的部件 ip 指示下一条将要执行的指令的地址 sp 保存当前栈顶地址的寄存器 状态标志 指出指令操作结果的标志,如zf,cf等。 控制标志 控制操作的标志,只有df,if,tf三个。 alu 进行算术和逻辑运算的单元 存储器 存储程序、数据等信息的的记忆装置。 物理地址 cpu发出的访问存储器的地址信息。 偏移地址 相对于段起始地址的偏移量。 段地址 是逻辑段的起始地址。 1.2下列操作可使用哪些寄存器 ·存放各种运算操作的数据:ax,bx,cx,dx,sp,bp,si,di (我的辅导书上没有sp,bp;why?) ·存放数据串
2、操作时的计数值:cx ·查看程序已执行到哪条指令的地址:ip ·查看堆栈中当前正要进行入出栈的存储单元的地址:sp ·查年运算结果是否等于零:psw的zf ·查年程序中的数据存放段区是从哪个地址开始的:ds,es ·查看程序中的指令存放的段区是从哪个地址开始的:cs 1.3段地址和偏移地址为1000:117a的存储单元的物理地址是什么?而1109:00ea或1025:0f2a的存储单元的物理地址又是什么:这说明了什么问题? 1000:117a物理地址为:1117a;1109:00ea的物理地址为:1117a;1025:0f2a的物理地址为:11
3、17a.说明物理地址不变,段地址改变,偏移地址也随之变化. 1.存储器地址对应的数据(图略) 75422h(字节):9ch 75424h(字节):5dh 75422h(字):249ch 75424h(字):e65dh 第二章 2.1写出相应的汇编语言指令: (1)以寄存器bx和si作为基址变址寻址方式把存储器中的一个字传送到cx寄存器。 mov cx,bxsi(注:寄存器寻址只能使用:bx,bp,si,di;且bx、bp或si,di不能同时使用,可能我说的不太对,请版主确认一下) (2)以寄存器bx和偏移量value作寄存器相对寻址方式把存储器的一个字和ax相加,把结果(即和)送回那个字单元中
4、。 add valuebx,ax (3)将一个字节立即数0b6h与符号的地址为num的存储器字节单元内容相比较。 cmp byte ptr 0b6h,num(如果前面不加byte rtr,默认的也是字节比较吧?还有双字比较,应该怎么写?) (4)测试从寄存器bp和di、偏移量count作为相对基址变址寻址方式寻址的存储器字节单元内容最高位b7的值,字节单元的内容不能改变。 test countbpdi,80h (5)将ah寄存中的高4位和低4位数据互换。 mov cl,4 rol(或ror) ah,cl (6)清除以寄存器si间接寻址的存储器字单元,同时清除cf标志位. xor ax,ax ;
5、使ax=00000000,cf=0 mov si,ax 2.2设ds=1000h,bx=2865h,si=0120h,偏移量d=47a8h,试计算下列各种寻址方式下的有效地址. 1)使用d的直接寻址 47a8h (这道指令怎么写?如何定义d的值) 2)使用bx的寄存器间接寻址 2865h 3)使用bx和d的寄存器相对寻址 700dh 4)使用bx、si和f的相对基址变址寻址 712dh 5)使用bx、si的基址变址寻址 2985 2.3假设ds=1000h,bx=2a80h,cx=3142h,si=0050h,(10050h)=3bh,(10051h)=86h,(11200h)=7ah,(11
6、101h)=64h,(12adoh)=0a3h,每小题的括号中分别填入指令执行后的结果: 1)mov ax,1200h ;ax=1200h 2)mov ax,1200h ;ax=1200h(书上的答案是647a,但是我用debug试了一下是1200,可能是因为我的pii的原因吧,希望有8088的朋友能试一下,版主,考起试来应该怎么写呀?) 3)add si,cx ;(10050h)=7dh,9100510=b7h,zf=0,cf=0,sf=1,of=1 4)or byte ptr bxsi,54 ;(12ad0h)=f7,cf=0,of=0 5)mov 150hbx,ch ;12bd0h=31
7、,ch=31 2.4指出下列指令的错误原因 1)mov ax,cl 两操作数的长度不一样. 2)mov cs,ax 不能给cs赋值 3)inc betabp 书上说:没有数据类型说明,但我认为它应该自动默认为字节操作,版主再来看看吧 4)mov es,1850h 立即数不能直接送段寄存器 5)add bx,ds 段寄存器不能做为加法操作数使用 6)and ax,cx 寄存器寻址只能使用bx,si,di,bp 2.5说明下列指令执行的操作,说明原始数据和结果数据的存储地点 贴子相关图片: 作者: 218.27.73.* 2005-9-3 09:21 回复此发言 - 2 汇编语言程序设计课后习题答
8、案 原始数据(结果数据) 1)mov 2700h,cx 这条指令在我的p4试了一下,是错误的;如果考试时出只好说是:把cx中的内容送到(数据段中偏移地址为2700h字单元)中; 2)mov dh,50si 将数据段中有效地址为si+50的字节单元中的数据送入(dh)中; 3)lea si,array 将array的偏移地址送入(si),结果数据在代码段对相应指令字节中 4)das 将al中的压缩的十六进制数调整为十进制数,结果数据在al中,原始数据也在al中 5)adc cl,bx 将bx和cl的和加上cf的值后,存放在cl中,结果在cl中,原始在bx,cl,cf中 6)ror word pt
9、r alphasi,cl 将偏移地址为alpha+si字单元中的数据循环移,结果和原始都在哪个字单元中. 2.6指出下列无条件转移指令的转移地址中的偏移地址是什么,存放在何处. 1)jmp bx 偏移地址是bx中的值,存放在bx中 2)jmp word ptr bx 偏移地址是以bx中的值为偏移地址的一个字单元中的数值,存放在以bx中的值为偏移地址的一个字单元中 3)jmp near ptr proa 偏移地址为proa的偏移地址,存放在cs段的相应指令处(书上说的不一样,请版主做下这道题) 4)jmp far ptr far_pro 偏移地址为far_pro的偏移地址,存放在cs段的相应指令
10、处 5)jmp short again 偏移地址为again的偏移地址,存放在cs段的相应指令处(书上说的不一样,请版主做下这道题) 6)jmp dword ptr bxdi 偏移地址是以bx,di为基址变址寻址的两个字单元的内容,存放在以bx,di为基址变址寻址的两个字单元中 2.7写出把道址为block的字数组的第六个字送到cx寄器的指令序列,要发别使用以下几种寻址方式 1)以bx寄存器的间接寻址 lea bx,block+0ah mov cx,bx 2) 以bx寄存器的相对寻址 lea bx,block mov cx,0ahbx 3) 以bx,si的基址变址寻址 lea bx,block
11、 mov cx,bxsi 2.8指出下列指令的源和目的操作数的寻址方式 (目地操作数寻址方式;原操作数寻址方式) 1)mov array,bx 直接寻址;寄存器寻址 2)adc cx,alphabxsi 寄存器寻址;相对基址变址寻址,寄存器寻址 3)and byte ptr gamma di,11011001b 寄存器相对寻址;立即寻址,寄存器相对寻址 4)inc word ptr bx 寄存器间接寻址;寄存器间接寻址 5)test ex:is,dx (目的操作数?在哪?只改变标志位,算寄存器寻址吗?书上写的寄存器间接寻址,不明白);寄存器间接寻址,寄存器寻址 6)sbb si,si 寄存器寻
12、址;寄存器寻址,寄存器间接寻址 2.9分别说明下列每组指令中的两条指令的区别: 1) mov ax,table lea ax,table 前者是将变量table的内容传递给ax;后者是将table和偏移地址传递给ax 2) and bl,0fh or bl,0fh 前者是bl的内容与0f相与;后者是bl与0fh相或 3) jmp short l1 jmp near ptr l1 前者为短跳转,后者为近跳转 4) mov ax,bx 第三章 3.1 1)使计算机执行某种操作的命令 ;指令 2)表示计算机执行什么操作的符号 ;助记符 3)存放指令机器码的存储器段区 ;代码段 4)指出指令在程序中位
13、置的符号地址 ;标号 5)将汇编语言程序翻译成机器码程序的实用程序 ;汇编程序 3.2试写出完成下列操作的指示性语句: 1)将56h,78,0b3h,100存放在定义为字节变量array的存储单元中. array db 56h,78,0b3h,100 2)将字数据2965h,45h,2965,0a6h存放在定义为字节变量data的存储单元中. array db 65h,29h,45h,95h,0bh,0a6h ;书上在0b和0a6h后面有个0,不什么是什么. 3)将字节数据56h,0c6h,78h,12h存放在字变量alpha的存储单元中.并且不改变数据按字节存储的次序 alpha dw 0c
14、656h,1278h 4)在beta为道址的存储单元中连续存放字节数据:2个23,5个'a',10个(1,2),20个空单元。 beta db 2 dup (23),5 dup ('a'),10 dup (1,2), 20 dup (?) 5)在string为首址的存储单元中存放字符串'this is a exampe' string db 'this is a exampe' 3.3下列伪指令序列中,basub的值为多少?它表示什么意义? 作者: 218.27.73.* 2005-9-3 09:21 回复此发言 - 3 汇编语言
15、程序设计课后习题答案 buff db 7,6,'56',? array dw 0,67h,7 basub equ array-buff basub的值是5,它表示array与buff的首地址的差. 3.4假设程序中的数据定义如下: buf1 db 100 dup ('a') buf2 dw 1275h,567,0c5h buf3 db 20 dup (?) buf4 db 7,4,6,9,8 1)用一条指令将buf1的谝移地址送入bx. lea bx,buf1 2)将buf2的第三字节数据送入cl mov byte ptr cl,buf2+2 3)将0a6h送入
16、buf3的第10个字节单元中 mov byte ptr buf3+9,0a6h 4)用伪指令写出buf1和buf2二者的总长度(字节数) l1_2 equ buf3-buf1 5)用一组指令写出buf2的第二个数据567和buf4的第三个数据6相加,结果(和)送入buf3 mov al,buf4+2 mov ah,0 add ax,buf2+2 mov buf3,ax 3.5指出下列第一对伪指令语句的区别: 1)x1 db 76; x2 equ 76 前者是向x1的字节单元存入76,后者是将x2的值定义为76. 2)x1 dw 3548h; x2 equ byte ptr x1 前者是定义x1
17、的字单元值为3548,后者是定义x2的值为x1的第一个字节单元的值48. 3)x1 equ 3; x2 = 3 两者都是赋值语句,但前者只能定义一次,后者可以重复定义. 4)x1 dw 3678h; x2 db 36h,78h 前者的字节单元内容依次为78,36;后者的字节单元内容依次为36,78. 5)x1 dw 6341h; x2 dw 6341 前者为十六进制的6341;后者为十进制的6341 3.6设置一个数据段data_sec,其中连续存放下列的8个变量,用段定义语句和数据定义语句写出数据段: 1)data1为字符串变量:'data segment' 2)data2为
18、十进制数字节变量:72,65,-10 3)data3为十六进制数字字节变量:109,98,21,40 4)data4为10个零的字节变量. 5)data5为数字的ascii字符字节变量:12345 6)data6为十进制的字变量:7,9,298,1967 7)data7为十六进制的数的字变量:785,13475 8)data8为本段中字变量和字节变量之间的字节单元数之差 data_sec segment data1 db 'data segment' data2 db 72,65,-10 data3 db 6dh,62h,15h,28h data4 db 10 dup (0)
19、data5 db '12345' data6 dw 7,9,298,1967 data7 dw 0311h,34a3h d1 equ data6-data1 d2 equ $-data6 data8 equ d2-d1 3.7设程序中的数据定义如下: data1 dw ? data2 db 32 dup (?) data3 dd ? dlength equ $-data1 问dlength的值为多少?它表示什么意义? dlength的值为38,表示data1,data2,data3所占用的字节数之和 3.8指出下列第一小题中的伪指令表达的操作哪些是错误的?错误在哪时? 1) a
20、lpha equ 78h beta equ alpha+1 没错. 2) data db 395 1个字节最多能够表示256 3) x1 seg . . . x1 ends seg应该写成segment 4) alpha equ beta beta没有赋值 5) count equ 100 count equ 78 不可以用equ给一个变量重复赋值 6) main proc . . . endp 过程结束标志,应该有个main 7)array dw 10 dup (?) . . . jmp array array是变量,jmp不能跳到array处 8) segment code_seg . .
21、 . ends code_seg 书写格式错误,应写为 code_seg segment code_seg ends 3.9对于下面的数据定义,写出各条指令执行的结果: fldb dw 0a24fh table db 32h,52,0c2h,213 tea equ word ptr table array db 'abcd' count equ $-array 1)mov ax,fldb al=(4fh) 2)mov bx,tea bh=(52h)第四章4.1写出完成下述功能的程序段:1)将32h存入ch中.mov ch,32h2)将ch中的内容与2ah相加.add ch,2a
22、h3)将ch中的内容乘2add ch,ch ;(练习册上的答案为:shl ch,1)4)将ch中的内容存入以bx作为相对基址寻址的数组变量num的第10个字节单元中(数据段)mov bx,9mov numbx,ch4.2写出完成下述功能的程序段:1)在数据段中,字变量dara1有两个数据:1c35h和0214h,字变量dara2有两个数据:0a678和81a4h,字变量dara3为二个空单元.data segmentdara1 dw 1c35h,0214hdara2 dw 0a678,81a4hdara3 dw 2 dup (?)data ends2)将data1的第一个字数据传送给ax.mo
23、v ax,data13)将ax的内容与fara2的第一个字数据相减sub ax,fara24)将ax中的结果存入data3的第一个空单元.mov data3,ax5)将data1的第二个字数据传送给ax.mov ax,data1+26)将ax的内容与sara2的第二个数据及第一次相减速的借位相减*b ax,sara2+27)将ax的结果存入data3的第二个单元中4.3在a1和a2的字单元中各有一个带符号数字数据,试求出a1和a2组成的双字长数的绝对值,存入b1和b2的字单元中,画出程序流程图和编写职程序段,包括伪指令和指令序列.data segmenta1 dw n1a2 dw n2b1 d
24、w ?b2 dw ?data endscode segmentassume cs:code,ds:datamov ax,datamov ds,axcmp word ptr a2,7fffhjnl code1neg word ptr a2neg word ptr a1code1: mov ax,a1mov dx,a2mov b1,axmov b2,dxmov ah,00hint 21hcode endsend4.4将存放在字节变量bcd1中的两个十进制数的ascii码合并为一字节压缩的bcd码,存入bcd2中,试编写程序段data segmentbcd1 db 37h,38hbcd2 db ?data endscode segmentassume ds:data,cs:codestart: mov ax,datamov ds,axmov al,bcd1+1and al,0fhmov bl,bcd1mov cl,4shl bl,clor al,blmov bcd2,alcode endsend start4.5分别编写出下列各算式的程序段,其中x、y、z、r和w均为存放16位无符号数的单元符号地址:data segmentx dw 3031hy dw 3032hz dw 3033hr dw 3034hw dw 3035hdata endscode segmentassume cs
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论