汇编答案
更新时间:2024-05-20 10:35:01 阅读量: 综合文库 文档下载
汇编答案
习题1.5〕将下列十六进制数转换为二进制和十进制表示
(1)FFH (2)0H (3)5EH (4)EFH
(5)2EH (6)10H (7)1FH (8)ABH 答 (1)FFH 11111111B 255D
(2)0H 0B 0D (3)5EH 1011110B 94D (4)EFH 11101111B 239D (5)2EH 101110B 46D (6)10H 10000B 16D (7)1FH 11111B 31D (8)ABH 10101011B 171D 〔习题1.6〕
将下列十进制数转换为BCD码表示
(1)12 (2)24 (3)68 (4)127 (5)128 (6)255 (7)1234 (8)2458 答 (1)12 00010010
(2)24 00100100 (3)68 01101000 (4)127 000100100111 (5)128 000100101000 (6)255 001001010101 (7)1234 0001001000110100 (8)2458 0010010001011000
〔习题1.7〕
将下列BCD码转换为十进制数
(1)10010001 (2)10001001 (3)00110110 (4)10010000 (5)00001000 (6)10010111 (7)10000001 (8)00000010〔解答〕 (1)91 (2)89 (3)36 (4)90 (5)08 (6)97 (7)81 (8)02
〔习题1.8〕将下列十进制数分别用8位二进制数的原码、反码和补码表示
(1)0 (2)-127 (3)127 (4)-57
(5)126 (6)-126 (7)-128 (8)68 (1)0 +0 00000000 00000000 00000000 -0 10000000 11111111 00000000 (2)-127 11111111 10000000 10000001 (3)127 01111111 01111111 01111111
(4)-57 10101111 11010000 11010001 (5)126 01111110 01111110 01111110 (6)-126 11111110 10000001 10000010 (7)-128 10000000 (8)68 01000100 01000100 01000100 〔习题1.9〕完成下列二进制数的运算
(1)1011+1001 (2)1011-1001 (3)1011×1001 (4)10111000÷1001 (5)1011 ∧1001 (6)1011 ∨1001 (7)~1011 (8)1011 ? 1001 答(1)1011+1001=10100 (2)1011-1001=0010 (3)1011×1001=1100011
(4)10111000÷1001=10100,余数 1000 (5)1011 ∧ 1001=1001 (6)1011 ∨1001=1011 (7)~1011=0100
(8) 1011?1001=0010(?代表异或)
〔习题1.10〕数码0~9、大写字母A~Z、小写字母a~z对应的ASCII码分别是多少?ASCII码为0dh、0ah对应的是什么字符?
答:数码0~9:30H~39H 大写字母A~Z:41H~5AH 小写字母a~z:61H~7AH
ASCII码为0dh、0ah分别对应回车和换行控制字符。
〔习题1.11〕计算机中有一个“01100001”编码,如果把它认为是无符号数,它是十进制什么数?如果认为它是BCD码,则表示什么数?又如果它是某个ASCII码,则代表哪个字符?
答:十进制无符号数:01100001B=61H=97
BCD码:61 ASCII码:a
〔习题1.17〕举例说明CF和OF标志的差异。
答:溢出标志OF和进位标志CF是两个意义不同的标志。
进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确;溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确。
例1:3AH + 7CH=B6H
无符号数运算:58+124=182,范围内,无进位 有符号数运算: 58+124=182 ,范围外,有溢出 例2:AAH + 7CH=(1)26H
无符号数运算:170+124=294,范围外,有进位 有符号数运算:-86+124=28 ,范围内,无溢出
习题1.19〕什么是8086中的逻辑地址和物理地址?逻辑地址如何转换成物理地址?请将如下逻辑地址用物理地址表达:
(1)FFFFh:0 (2)40h:17h (3)2000h:4500h (4)B821h:4567h
答:在8086处理器中,对应每个物理存储单元都有一个唯一的20位编号,就是物理地址,从00000H~FFFFFH。
在8086内部和用户编程时,采用的段基地址 : 段内偏移地址形式称为逻辑地址。
将逻辑地址中的段地址左移二进制4位(对应16进制是一位,即乘以16),加上偏移地址就得到20位物理地址
如下逻辑地址用物理地址表达: (1)FFFFh:0=FFFF0H (2)40h:17h=00417H (3)2000h:4500h=24500H
(4)B821h:4567h=BC777H (不要算错)
〔习题1.24〕说明下列指令中源操作数的寻址方式?如果BX=2000H,DI=40H,给出DX的值或有效地址EA的值。
(1) mov dx,[1234h]
(2) mov dx,1234h (3) mov dx,bx (4) mov dx,[bx] (5) mov dx,[bx+1234h] (6) mov dx,[bx+di]
(7) mov dx,[bx+di+1234h]〔解答〕 (1)直接寻址,EA=1234H (2)立即数寻址,DX=1234H (3)寄存器寻址,DX=2000H (4)间接寻址,EA=2000H (5)相对寻址,EA=3234H (6)基址变址寻址,EA=2040H (7)相对基址变址寻址,EA=3274H
习题2.1〕已知DS=2000H、BX=0100H、SI=0002H,存储单元[20100H]~[20103H]依次存放12 34 56 78H,[21200H]~[21203H]依次存放2A 4C B7 65H,说明下列每条指令执行完后AX寄存器的内容。
(1) mov ax,1200h (2) mov ax,bx (3) mov ax,[1200h] (4) mov ax,[bx] (5) mov ax,[bx+1100h] (6) mov ax,[bx+si]
(7) mov ax,[bx][si+1100h]〔解答〕 (1)AX=1200H (2)AX=0100H
(3)AX=4C2AH ;偏移地址=bx=0100h (4)AX=3412H ;偏移地址=bx=0100h (5)AX=4C2AH ;偏移地址=bx+1100h=1200h
(6)AX=7856H ;偏移地址=bx+si=0100h+0002h=0102h
(7)AX=65B7H ;偏移地址=bx+si+1100h=0100h+0002h+1100h=1202h 〔习题2.2〕指出下列指令的错误
(1) mov cx,dl (2) mov ip,ax (3) mov es,1234h (4) mov es,ds (5) mov al,300 (6) mov [sp],ax (7) mov ax,bx+di
(8) mov 20h,ah 〔解答〕 (1)两操作数类型不匹配 (2)IP指令指针禁止用户访问 (3)立即数不允许传给段寄存器 (4)段寄存器之间不允许传送 (5)两操作数类型不匹配 (6)目的操作数应为[ SI ] (7)源操作数应为 [BX+DI] (8)立即数不能作目的操作数
〔习题2.6〕给出下列各条指令执行后AL值,以及CF、ZF、SF、OF和PF的状态: mov al,89h add al,al add al,9dh cmp al,0bch sub al,al dec al
inc al 〔解答〕
mov al,89h ; AL=89h CF ZF SF OF PF add al,al ; AL=12h 1 0 0 1 1 ; 1000 1001 +1000 1001 10001 0010
add al,9dh ; AL=0afh 0 0 1 0 1 ; 0001 0010
+ 1001 1101 1010 1111
cmp al,0bch ; AL=0afh 1 0 1 0 1 ; 1010 1111 -1011 1100 * 0100 0011
sub al,al ; AL=00h 0 1 0 0 1 dec al ; AL=0ffh 0 0 1 0 1 ; 0000 0000 - 0000 0001 *1111 1111
inc al ; AL=00h 0 1 0 0 1 ;1111 1111 +0000 0001
*1111 1111
〔习题2.7〕设X、Y、Z均为双字数据,分别存放在地址为X、X+2;Y、Y+2;Z、Z+2的存储单元中,它们的运算结果存入W单元。阅读如下程序段,给出运算公式。
mov ax,X mov dx,X+2 add ax,Y adc dx,Y+2 add ax,24 adc dx,0 sub ax,Z sbb dx,Z+2 mov W,ax
mov W+2,dx 〔解答〕 W=X+Y+24-Z
〔习题2.8〕请分别用一条汇编语言指令完成如下功能:
(1)把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器。
(2)用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。
(3)用BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和CX寄存器的内容相加,并把结果送回存储器中。
(4)用位移量为0520H的直接寻址方式把存储器中的一个字与数3412H相加,并把结果送回该存储单元中。
(5)把数0A0H与AL寄存器的内容相加,并把结果送回AL中。〔解答〕 (1)ADD DX,BX (2)ADD AL,[BX+SI] (3)ADD [BX+0B2H],CX
(4)ADD WORD PTR [0520H],3412H
(5)ADD AL,0A0H
〔习题2.9〕设X、Y、Z、V均为16位带符号数,分别装在X、Y、Z、V存储单元中,阅读如下程序段,得出它的运算公式,并说明运算结果存于何处。
mov ax,X ;ax=X imul Y ;DX.AX=X*Y mov cx,ax ;cx=X*Y的低16位 mox bx,dx ;bx=X*Y的高16位 mov ax,Z ;ax=Z cwd
add cx,ax ;cx=Z的低16位+X*Y的低16位
adc bx,dx ;bx=Z的高16位+X*Y的高16位+低位进位 sub cx,540 ;cx=Z的低16位+X*Y的低16位-540
sbb bx,0 ;bx=Z的高16位+X*Y的高16位+低位进位-低位借位 mov ax,V ;ax=V cwd
sub ax,cx ;ax=V的低16位-(Z的低16位+X*Y的低16位-540)
sbb dx,bx ;dx=V的高16位-(Z的高16位+X*Y的高16位+低位进位-低位借位)-低位借位
idiv X ;/X〔解答〕 [V-(X*Y+Z-540)]/X AX存商,DX存余数
〔习题2.10〕指出下列指令的错误:
(1) xchg [si],30h (2) pop cs (3) sub [si],[di] (4) push ah (5) adc ax,ds (6) add [si],80h (7) in al,3fch
(8) out dx,ah〔解答〕 (1)xchg的操作数不能是立即数 (2)不应对CS直接赋值
(3)两个操作数不能都是存储单元 (4)堆栈的操作数不能是字节量 (5)adc的操作数不能是段寄存器 (6)没有确定是字节还是字操作 (7)in不支持超过FFH的直接寻址
(8)out只能以AL/AX为源操作数
〔习题2.13〕编写程序段完成如下要求:
(1)用位操作指令实现AL(无符号数)乘以10
(2)用逻辑运算指令实现数字0 ~ 9的ASCII码与非压缩BCD码的互相转换 (3)把DX.AX中的双字右移4位〔解答〕 (1) ;不考虑进位 mov bl,al mov cl,3
shl al,cl ;*8 add al,bl ;shl bl,1 add al,bl ;考虑进位 xor ah,ah mov bx,ax mov cl,3 shl ax,cl
add ax,bx ;shl bx,1 add ax,bx
(2)数字0~9的ASCII码是:30h~39h 非压缩BCD码的0~9是:00h~09h 方法一:
and al,0fh ;实现ASCII到非压缩BCD码的转换 or al,30h ;实现非压缩BCD码到ASCII的转换 方法二:
xor al,30h ;求反D5D4位,其他不变 ;即高4位为3,则变为0;高4位为0,则变为3 (3) mov cl,4
again: shr dx,1 ;实现逻辑右移
;采用“sar dx,1”,则实现算术右移 rcr ax,1 dec cl jnz again
〔习题3.9〕假设myword是一个字变量,mybyte1和mybyte2是两个字节变量,指出下列语句中的错误原因。
(1) mov byte ptr [bx],1000
(2) mov bx,offset myword[si] (3) cmp mybyte1,mybyte2 (4) mov al,mybyte1+mybyte2
(5) sub al,myword (6) jnz myword〔解答〕 (1)1000超出了一个字节范围
(2)寄存器的值只有程序执行时才能确定,而offset是汇编过程计算的偏移地址,故无法确定,改为lea bx,myword[si]
(3)两个都是存储单元,指令不允许
(4)变量值只有执行时才确定,汇编过程不能计算 (5)字节量AL与字量myword,类型不匹配
(6)Jcc指令只有相对寻址方式,不支持间接寻址方式 习题3.14〕画图说明下列语句分配的存储空间及初始化的数据值:
(1) byte_var DB ?ABC?,10,10h,?EF?,3 DUP(-1,?,3 DUP(4))
(2) word_var DW 10h,-5,?EF?,3 DUP(?)〔解答〕 (1)从低地址开始,依次是(十六进制表达):
41 42 43 0a 10 45 46 ff - 04 04 04 ff - 04 04 04 ff - 04 04 04 (2)从低地址开始,依次是(十六进制表达): 10 00 FB FF 46 45 - - - - - -
〔习题3.19〕设在某个程序中有如下片段,请写出每条传送指令执行后寄存器AX的内容:
mydata segment
ORG 100H VARW DW 1234H,5678H VARB DB 3,4 ALIGN 4 VARD DD 12345678H EVEN BUFF DB 10 DUP(?) MESS DB ?HELLO?
BEGIN: MOV AX,OFFSET MESS
MOV AX,TYPE BUFF+TYPE MESS+TYPE VARD MOV AX,SIZEOF VARW+SIZEOF BUFF+SIZEOF MESS MOV AX,LENGTHOF VARW+LENGTHOF VARD MOV AX,LENGTHOF BUFF+SIZEOF VARW MOV AX,TYPE BEGIN
MOV AX, OFFSET BEGIN 〔解答〕
MOV AX, OFFSET MESS ;AX=116H
MOV AX, TYPE BUFF+TYPE MESS+TYPE VARD ;AX = 1+1+4 = 06H
MOV AX,SIZEOF VARW+SIZEOF BUFF+SIZEOF MESS ;AX = 4+10+5 = 19 = 13H MOV AX,LENGTHOF VARW + LENGTHOF VARD ;AX = 2+1 = 03H MOV AX,LENGTHOF BUFF + SIZEOF VARW ;AX = 10+4 =14 = 0EH MOV AX,TYPE BIGIN ;AX = FF02H (近)
MOV AX,OFFSET BEGIN ;AX = 1BH
习题3.25〕按下面要求写一个简化段定义格式的源程序
(1) 定义常量num,其值为5;数据段中定义字数组变量datalist,它的头5个字单元中依次存放-1、0、2、5和4,最后1个单元初值不定;
(2) 代码段中的程序将datalist中头num个数的累加和存入datalist的最后1个字单元中。〔解答 .model small
.stack .data num equ 5 datalist dw -1,0,2,5,4,? .code .startup
mov bx,offset datalist mov cx,num xor ax,ax
again: add ax,[bx] inc bx inc bx loop again mov [bx],ax .exit 0 end
〔习题4.1〕例题4.2如果要求算术右移8位,如何修改程序。 〔解答〕
思路: 首先由最高位字节向次低位字节传送……次低位字节向最低位字节传送(共7次);再判最高位字节符号位,如为0,送00h到最高位字节;如为1,送ffh到最高位字节。传送可参考例题4.2,不过应从第一号字节送第零号字节,……最高位字节向次低位字节传送;也可以用循环来完成:
.model small .stack 256 .data
qvar dq 1234567887654321h .code .startup mov cx,7 mov si,1
again: mov al, byte ptr qvar[si] mov byte ptr qvar[si-1],al inc si loop again test al,80h jz ezz
mov bl,0ffh jmp done ezz: mov bl,0
done: mov byte ptr qvar[7],bl .exit 0
end
〔习题4.2〕例题4.2如果要求算术左移7位,如何用移位指令实现。 〔解答〕
思路:可设计外循环体为8个字节左移一次,方法是:最低位字节算术左移一次, 次低位字节至最高位字节依次带 CF 位循环左移一次(内循环共8次),外循环体控制执行7次即可。
.model small .stack 256 .data
qvar dq 1234567887654321h .code .startup
mov dx, 7 ;外循环次数 mov ax, byte ptr qvar[0] ;最低位字节送ax
lpp: shl ax, 1 ;最低位字节左移一次,其d7移入CF位 mov si, 1
mov cx, 7 ;内循环次数
again: rcl byte ptr qvar[si], 1 ;高位字节依次左移 P50 inc si loop again dec dx jnz lpp .exit 0
.end
〔习题4.3〕将AX寄存器中的16位数连续4位分成一组,共4组,然后把这4组数分别放在AL、BL、CL和DL寄存器中。〔解答〕
思路:设这四组从低位到高位分别放在AL、BL、CL和DL寄存器中。仅列出代码段: mov bl, al ;将al中的两组分开 and al, 0fh ;屏蔽高四位后送al
mov cl, 4 ;原al中的数据逻辑右移4次送bl shr bl, cl
mov dl, ah ;将ah中的两组分开 and dl, 0f0h ;屏蔽低高四位后送dl
mov cl, 4 ;原ah中的数据逻辑右移4次送dl shr dl, cl
mov cl, ah ;屏蔽高四位后送cl
and cl, 0fh
〔习题4.4〕编写一个程序,把从键盘输入的一个小写字母用大写字母显示出来。 〔解答〕
getkey: mov ah, 1 ;从键盘输入,出口:al存键值 int 21h
cmp al, 'a' ;判键值是小写字母? jb getkay cmp al, 'z' ja getkay
sub al,20h ;是小写字母转换为大写字母 mov dl,al
mov ah, 02h ;显示 int 21h
编程实现把键入的一个字符,用二进制形式(0 / 1)显示出它的ASCII代码值。 〔解答〕 .model small .stack 256 .data
stri1 db 'please input',0dh,0ah,'$' .code .startup
mov dx,offset stri1 mov ah,09h int 21h
mov ah, 01h int 21h mov cx, 8 again: xor dl,dl shl al, 1 adc dl, '0' mov ah,02h int 21h loop again .exit 0
end
〔习题4.17〕编写程序,要求从键盘接收一个数bellN(0 ~ 9),然后响铃bellN次。 〔解答〕
.model small .stack .data
stri1 db 'please input number:1--9',0dh,0ah,'$' .code
.startup
again: mov dx,offset stri1 ;显示stri1,提示输入 mov ah,09h int 21h
mov ah,01h ;调用输入一个字符 int 21h ;输入一个字符存在al中 cmp al, '1' ;判该字符,如不在?1?--?9? jb again ;重新输入 cmp al, '9' ja again
and al,0fh ;在?1?--?9?,屏蔽高4位 mov cl, al ;振铃次数送cx xor ch,ch
abc: mov dl, 07h ;调用一次振铃 mov ah, 02h int 21h loop abc .exit 0
end
〔习题4.18〕编写程序,将一个包含有20个有符号数据的数组arrayM分成两个数组:正数数组arrayP和负数数组arrayN,并分别把这两个数组中的数据个数显示出来。 〔解答〕
.model small include io.inc .stack .data
arrayM db 1,2,3,4,5,6,0,-3,-5,-6,0,7,6,90,-18,-23,34,7,9,8 ;源数组 arrayP db 20 dup(?) ;正数数组 arrayN db 20 dup(?) ;负数数组 dispP db 'Plus Number: ','$'
dispN db 0dh,0ah,'Negs Number: ','$' .code .startup
mov cx, 20 ;源数组元素数
xor bx, bx ;设bh为正数个数,bl为负数个数,均清零 xor si, si ;源数组地址位移量 again: ;循环20次 mov ax, arrayM[si] ;取一个元素 cmp ax,0 ;判正数
jl Neg
inc bh ;是,正数个数加1 jmp next
Neg: inc bl ;否,负数个数加1 next: inc si ;修改位移量 loop again ;循环次数减1
mov ah,09h ;调用显示字符串功能 mov dx, offset dispP ;显示个数 int 21h mov al,bh
call dispuib ; 调用I/O子程序库中的子程序 mov ah,09h ;调用显示字符串功能 mov dx, offset dispN ;显示个数 int 21h mov al,bl
call dispuib ; 调用I/O子程序库中的子程序 .exit 0
end
〔习题4.19〕编写计算100个正整数之和的程序。如果和不超过16位字的范围(65535),则保存其和到wordsum,如超过则显示?overflow?。 〔解答〕
.model small .stack .data num equ 100 wlist dw num dup(?) wordsum dw ? error db 'overflow. $' .code .startup
mov bx,offset wlist mov cx,num xor ax,ax again: add ax,[bx] jc next inc bx inc bx loop again mov [bx],ax jmp done
next: mov dx,offset error mov ah,9 int 21h done: .exit 0 end
4-28写一个子程序,根据入口参数AL=0/1/2,分别实现对大写字母转换成小写、小写转换成大写或大小写字母互换。欲转换的字符串在string中,用0表示结束。〔解答〕
Change proc
Push bx ;保护bx xor bx, bx ;位移量清零
cmp al,0 ;根据入口参数AL=0/1/2,分别处理 jz chan_0 dec al jz chan_1 dec al jz chan_2 jmp done
chan_0: mov al,string[bx] ;实现对大写字母转换成小写 cmp al,0 jz done
cmp al,?A? ;是大写字母 jb next0
cmp al,?Z? ;是大写字母 ja next0
add al, 20h ;转换 mov string[bx], al
next0: inc bx ;位移量加1,指向下一字母 jmp chan_0
chan_1: mov al,string[bx] ;实现对小写字母转换成大写 cmp al,0 jz done
cmp al,?a? ;是大写字母 jb next1
cmp al,?z? ;是大写字母 ja next1
sub al, 20h ;转换 mov string[bx], al
next0: inc bx ;位移量加1,指向下一字母
jmp chan_1
chan_2: mov al,string[bx] ;实现对大写字母转换成小写 cmp al,0 jz done
cmp al,?A? ;是大写字母 jb next2
cmp al,?Z? ;是大写字母 ja next20
add al, 20h ;转换 jmp next2
next20: cmp al,?a? ;是大写字母 jb next2
cmp al,?z? ;是大写字母 ja next2
sub al, 20h ;转换 mov string[bx], al
next2: inc bx ;位移量加1,指向下一字母 jmp chan_2
done: pop bx ;恢复bx ret change endp
正在阅读:
汇编答案05-20
重庆市第三届运动会田径比赛04-12
作为一名在银行信用卡从事营销工作近几个月的营销人员08-23
2008版ISO9000质量手册及程序文件范本 - 图文01-21
不良资产现状、成因及对策01-18
常用临床医学术语11-27
勇网直前作文600字06-24
销售合同管理系统09-12
混沌加密09-22
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 汇编
- 答案
- 西方哲学导论
- 电子商务O2O模式的现状及对策
- 2014年浙大远程教育-建设法规与合同管理离线作业(选)
- 重庆小面加盟费低
- 经济法练习册
- 四川省成都七中2015-2016学年高二上学期10月阶段性考试英语试题
- 挽联选汇(附称谓)
- 金成雅苑二期-北京市共有产权房预售合同 - 图文
- 电机驱动技术的发展现状与前景展望
- 住宅工程质量缺陷与通病防治措施
- K12配套2017 - 2018学年八年级生物下册第七单元第二章生物的遗传
- 行业风险分析(上海环盟) - 图文
- 新版PEP四年级英语下册导学案 - 图文
- 固定义齿试题修改
- PS的一些理论知识
- 管理心理学实践作业
- 发挥董事会作用促进产学研结合
- 全面高安市总工会2011年度工会工作汇报
- 试析建筑工程造价中计算机的应用发展
- 毕业设计