《汇编语言课后习题答案---郑晓薇(整理后的).doc》由会员分享,可在线阅读,更多相关《汇编语言课后习题答案---郑晓薇(整理后的).doc(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
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=AAH2 5E8AH,0BE6H,3DEH,4940H3 00011101+00110101=01010010=52H=8201001001+11101000=00110001=31
2、H=4910111110+01010010=00010000=10H=1610011010+11110001=10001011=8BH= -117400101001+01010011=01111100+00000110=10000010=82H=820111001100100100=0100111100000110=01001001=49H=4901100110+00011000=01111110+00000110=10000100=84H=840000000100110010+01110101=0000000110100111+00000110=0000001000000111=0207H=
3、2075 000020A3H,FF94H,00003456H,007FH,FFFFEC00H6 无符号数:065535,0000HFFFFH;带符号数:-32768+32767,8000H7FFFH7 (1) 38H等于十进制数56,是十进制数56的补码,数字8的ASCII码,十进制数38的压缩BCD码(2) FFH等于十进制数-1,是带符号数-1的补码,无符号数为255(3) 5AH等于十进制数90,是十进制数90的补码,大写字母Z的ASCII码(4) 0DH等于十进制数13,是十进制数13的补码,回车符的ASCII码8 (1) 108=01101100B=6CH,补码01101100B,压
4、缩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码323534H9 (1) 56+63=01110111B,CF=0,SF=0,ZF=0,OF=0(2) 83-45=00100110B,CF=0,SF=0,Z
5、F=0,OF=0(3) -74+29=11010011B,CF=0,SF=1,ZF=0,OF=0(4) -9237=01111111B,CF=1,SF=0,ZF=0,OF=110 回车、换行、响铃、ESC键、空格键、P、p习题二9 最少划分为16个逻辑段,最多划分为65536个逻辑段(每段16个字节)10 CS:IP,DS:BX、SI、DI,ES:BX、SI、DI,SS:SP、BP11 字节单元保存8位数,字单元保存16位数。根据源操作数的属性确定要访问的是字节单元还是字单元。 12 对于字节单元来说,偶地址和奇地址一样;对于字单元而言,最好用偶地址保存,可减少CPU的访存次数。13 首单元的
6、物理地址=38AE8H,末单元的物理地址=38AE8H+7FFFH=40AE7H16 (1)物理地址=27679H (2) 物理地址=20F92H (3) 物理地址=20F92H (2)和(3)的物理地址是一样的。说明逻辑地址不唯一,多个逻辑地址可对应到同一个物理单元上。17 代码段CS:IP的物理地址=55A84H 堆栈段SS:SP的物理地址=4DB65H数据段DS:BX的物理地址=17678H 附加段ES:DI的物理地址=2BA41H18 当前栈指针所指单元的物理地址是1522CH。堆栈区中还能保存254个字。19 执行E 20020 执行U 100 21 执行R CX,然后输入10022
7、 执行E DS:0 a b c d 习题三3 MOV AX,BX 源操作数为寄存器寻址,EA 无,物理地址 无MOV AX,1290H 立即寻址,EA 无,物理地址 无MOV AX,BX 寄存器间接寻址,EA=1290H, 物理地址=2FBB0HMOV AX,DS:1290H 直接寻址,EA=1290H, 物理地址=2FBB0HMOV AX,BP 寄存器间接寻址,EA=6756H, 物理地址=26A56HMOV DIBX,AX 目的操作数为基址变址寻址,EA=3C06H, 物理地址=32526HMOV ES:SI,AX 寄存器间接寻址,EA=348AH, 物理地址=50CAAH7 MOV AX
8、,CX 错。CX不能为间址寄存器MOV AL,1200H 错。立即数超出8位寄存器范围MOV AL,BX 错。两个操作数不匹配MOV SIDI,AX 错。两个变址寄存器不能在一起MOV ES:DX,CX 错。DX不能为间址寄存器MOV AX,VALUE 错。AX不能为间址寄存器MOV COUNT,SI 错。两个操作数不能都是存储单元8 (1) MOV AX,BX (2) MOV CL,15 (3) ADD AX,BX (4) MOV BX+SI,AL (5) MOV AX,VALUESI (6) SUB AX,DS:2000H9 (1) ADD AX,X+4MOV Y,AX (2) MOV B
9、X,4ADD AX,XBX MOV Y,AX(3) MOV BX,4MOV SI,OFFSET XADD AX,BX+SIMOV Y,AX10 立即寻址方式中操作数(立即数)和指令一起存放在代码段中。习题四10 (1) DATA SEGMENTX DW 0Y DW 0DATA ENDS(2) STRING DB Computer(3) COUNT DB 100 DUP(?)(4) PI EQU 3.14(5) VALUE LABEL BYTE11 (1)对。(2)错。260超出了字节范围。(3)错。X3是字节型,1234H是字型,不匹配。(4)对。(5)错。缺少DUP。(6)对。12 (1)A
10、L=3。(2)AX=2103H。(3)DX=TABLE的偏移地址。(4)CL=33H(5)BX=TABLE的段地址。(6)BX=1。(7)DX= TABLE的偏移地址。13 MOV DX,2012HMOV AX,5D68HMOV CX,1003HMOV BX,49A6HADD AX,BX (SUB AX,BX)ADC DX,CX (SBB DX,CX)14 SUB AX,CXSBB DX,015 MOV AX,extraMOV ES,AX16 (1) MOV AL,16ADD AL,XMOV BL,5IMUL BLMOV Z,AX(2) MOV BL,4MOV AL,XIDIV BLSUB A
11、L,YMOV Z,AX(3) MOV AL,XMOV BL,8IMUL BLMOV DX,AXMOV AH,0MOV AL,YMOV BL,16IDIV BLCBWADD DX,AXMOV AH,0MOV AL,WIMUL ALSUB DX,AXMOV Z,DX(4) MOV AL,XADD AL,YMOV BL,XSUB BL,YMOV AH,0IMUL BLMOV Z,AXMOV AL,XIDIV YCBWSUB Z,AX17 Z= (5+22-15)*14= 16818 从伪指令END START处获知程序从START标号开始。19 (1)减法: (2) 加法:MOV AX,8576H
12、MOV AX,8576HMOV BX,9988H MOV BX,9988HSUB AX,BX ADD AX,BX结果:AX=EBEEH 结果:AX=1EFEHCF=1,OF=0,ZF=0,SF=1 CF=1,OF=1,ZF=0,SF=021 (1) MOV AL,56HMOV BL,34HADD AL,BLDAAMOV Y1,AL(2) MOV AX,128HMOV BX,35HSUB AX,BXDASMOV Y2,AL(3) MOV AL,68HMOV BL,23HADD AL,BLMOV BL,45HSUB AL,BLDASMOV Y3,AL22 (1) MOV AX,0708HMOV B
13、X,0406HADD AL,BLADD AH,BH ;不用带进位加AAA ;加法调整,含进位调整MOV BX,AXXCHG AH,AL ;高4位调整AAAMOV BH,ALMOV Z1,BX ;保存十位、各位,百位在CF中(2) MOV AX,0905HMOV BX,0207HSUB AL,BLSUB AH,BH ;不用带借位减AAS ;减法调整MOV Z2,AX(3) MOV AX,0102HMOV BX,0006HMUL BX ;乘法先不用调整MOV BX,0303HSUB AX,BXAAS ;减法调整MOV Z3,AX(4) MOV AX,0704HMOV BX,0108HADD AL,
14、BLADD AH,BHAAA ;加法调整MOV BL,6AAD ;除法调整DIV BLMOV BH,AH ;余数保存在BHAND AX,000FHAAA ;商调整MOV Z4,AX ;保存商23 .model small.databuff db ?.codestart:mov ax,datamov ds,axmov ah,1 ;键盘输入int 21hsub al,30h ;去掉ASCII码mov buff,almov ah,4chint 21hend start24 .model small.codestart:mov ah,1 ;键盘输入int 21hsub al,20h ;变为大写mov
15、dl,almov ah,2int 21hmov ah,4chint 21hend start25 .model small.datax db 12hy db 34h.codestart:mov ax,datamov ds,axmov al,xadd al,y ;结果为46Hmov ah,al ;AH=46Hand al,0fh ;AL=06Hmov cl,4rol ah,cl ;AH=64Hand ah,0fh ;AH=04Hadd ax,3030h ;AX=3436Hmov bx,axmov dl,bh ;显示4mov ah,2 int 21hmov dl,bl ;显示6int 21hmov
16、 ah,4chint 21hend start26 data segment x db 0.000,1.000,1.414,1.732,2.000db 2.236,2.449,2.646,2.828,3.000 ;建立字符表y db 5 dup(?) ;存放查到平方根u db 3 ;要查的数data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov al,u ;要查的数mov cl,5mul cl ;u*5=15(号单元开始)mov ah,0mov bx,ax ;地址保存到bxmov si,0let1:mov
17、 al,xbx ;取出平方根数字mov ysi,al ;存入yinc siinc bxloop let1 ;循环取出5次mov ah,4chint 21hcode endsend start27 .model small.datax1 db zhang yan $ ;姓名为10个字符宽度x2 db li li $x3 db wang lan $x4 db zhao xue $x5 db li jiang $u db 3 ;要查的学号.code start:mov ax,datamov ds,axmov al,u ;给出学号mov cl,10mul cl ;u*10=30(号单元开始)mov a
18、h,0mov dx,ax ;地址保存到dxmov ah,9 ;9号功能显示字符串int 21hmov ah,4chint 21hend start28编程实现公式计算Z=X/4+16Y。.model small.datax db 4 y db 6z db ?.code start:mov ax,datamov ds,axmov al,x ;mov cl,2sar al,cl ; X/4mov cl,4mov bl,ysal bl,cl ;16Yadd al,bl ;X/4+16Ymov z,almov ah,4chint 21hend start29 .model small.datay db
19、 ?,?.code start:mov ax,datamov ds,axmov al,3 ;设al=3mov cl,6mul cl ;al*6mov cl,4 ;设cl=4sub al,cl ;相减mov bl,3 idiv bl ; /3mov y,al ;商mov y+1,ah ;余数mov ah,4chint 21hend start习题五11 进位标志CF=1 12 先把AX的值除以8等于0246H,再把高12位屏蔽为0,剩下AL=06H加上30H变为ASCII码显示出来。13 判断X0,是,Z=X-Y;否则Z=X的绝对值 14(1) 目的操作数是存储单元时,要用PTR伪操作指出单元的
20、属性 (2)DS段寄存器使用非法 (3)立即数使用非法 (4) 目的操作数不允许是立即数 (5) 两个操作数不允许都是存储单元 (6)移位次数超过1要用CL表示。15 AND AL,11011111B16 (1) AL=30H (2) AL=B7H (3) AL=C8H (4)AL=38H27 分支程序设计。完成如下公式的计算,请写出程序。 (X+3)/2 X0Y= 0 X=0 X4 X0程序如下:DATA SEGMENTX DB 23Y DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV A
21、L,XCMP AL,0JE SUB2JG SUB1MOV CL,2SAL AL,CLJMP SHORT SUB2SUB1:ADD AL,3SAR AL,1SUB2: MOV Y,ALMOV AH,4CHINT 21HCODE ENDSEND START28 设X、Y、Z为字节单元。如果X0,Z=4X-Y/16,否则,Z=X的绝对值。编程序实现。程序如下:DATA SEGMENTX DB 3Y DB 5Z DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AL,XCMP AL,0JL SS1
22、MOV CL,2SAL AL,CLMOV BL,YMOV CL,4SAR BL,CLSUB AL,BLJMP OUT1SS1: NEG ALOUT1: MOV Z,ALMOV AH,4CHINT 21HCODE ENDSEND START29 字数组M中有10个数据,分类统计其中正数、负数、0的个数,分别存入POSI、NEGA、ZERO 单元。程序如下:DATA1 SEGMENTM DW 21,-34,32,112,-324,0,76,0,48,50POSI DW ?NEGA DW ?ZERO DW ?DATA1 ENDSCODE1 SEGMENTASSUME CS: CODE1,DS:DAT
23、A1START: MOV AX,DATA1MOV DS,AXMOV CX,10LEA SI,MAGAIN: CMP WORD PTR SI,0JL LOWERJE EQUALINC POSIJMP LPP1LOWER: INC NEGAJMP LPP1 EQUAL: INC ZEROLPP1: ADD SI,2DEC CXJNZ AGAINMOV AH,4CHINT 21HCODE1 ENDSEND START30 试编写程序,从键盘接收一英文单词,以空格结束,将其存入BUF开始的存储单元中,并在最后加上字符串结束符$。主要程序部分:LEA BX,BUFLOP: MOV AH,1INT 21H
24、CMP AL,20HJE NEXTMOV BX,ALINC BXJMP LOPNEXT: MOV BYTE PTRBX,$31 编程。将AX寄存器中的16位数分成4组,每组4位,从低到高分别放在AL,BL,CL,DL中。程序段:START:MOV AX,1234HMOV BX,AXAND AL,0FH ;4AND BL,0F0H ;3AND AH,0FHMOV CL,AH ;2AND BH,0F0HMOV DL,BH ;1习题六11 累加和TOTAL=8312 循环统计X中0的个数13 (1) 将BB1:RCL AL,1改为BB1:ROL AL,1(2) 将BB2:CMP BX,TLOOPNE
25、 BB2改为:DEC BXBB2:INC BXCMP BX,TLOOPNE BB215 计算Y=12+34+56+78+910的程序段答案:MOV AL,1MOV BL,2MOV DX,0MOV CX,5AA1:MUL BLADD DX,AXINC BLMOV AL,BLINC BLLOOP AA116写程序段。查找CATT表中的字符”,找到后将SIGN单元置1,否则SIGN单元置0。catt db asddddsign db ?mov ax,extramov es,axmov sign,0mov al,lea di,cattcldmov cx,7repnz scasbjcxz neemov
26、sign,1nee: mov ah,4chint 21h17写程序段。在长度为N的字数组VALUE中统计负数的个数并保存到AX中。value dw 2,-4,-5,3,6,6,-8n equ ($-value)/2 ;元素个数start: mov ax,datamov ds,axmov cx,nmov bx,0mov ax,0rept1:mov si,valuebx ;取出元素cmp si,0 jge let1 ;0 转let1inc ax ;为负数,ax加1let1: add bx,2loop rept118从键盘输入一个数字,在屏幕上显示出以该数字开始10个数字串。CODE SEGMENT
27、ASSUME CS:CODESTART: MOV AH,1INT 21HMOV CX,10MOV BL,ALREPT1: CMP BL,9JLE NEXTSUB BL,10NEXT: MOV DL,BLMOV AH,2INT 21HINC BLLOOP REPT1MOV AH,4CHINT 21HCODE ENDSEND START19 data segmentbunch1 db stadentbunch2 db studEntdata endscode segmentassume cs:code,ds:data,es:datastart:mov ax,datamov ds,axmov es,
28、axlea si,bunch1lea di,bunch2mov bx,0 ;bh=相同的个数,bl=不同的个数mov cx,7let1:mov al,sicmp al,di ;两字符比较jz equl ;相同转equlinc bl ;不同bl加1jmp out1equl: inc bhout1:inc siinc diloop let1mov dl,n ;显示n,代表不同mov ah,2hint 21hadd bl,30h ;加上ASCII码mov dl,bl ;显示不同的个数int 21hmov dl,e ;显示e,代表相同int 21hadd bh,30hmov dl,bh ;显示相同的个
29、数int 21h mov ah,4chint 21hcode endsend start21 DATA SEGMENTSTR DB SDABF G H0DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA DI,STRSPACE:MOV CX,10MOV AL,DICMP AL,0JE OUTCMP AL,20HJE DELETEJMP EXITSUB CX,DIMOV SI,DIDELETE:MOV BL,SI+1MOV SI,BLINC SILOOP DELETEEXIT:JMP SPACEOUT:
30、MOV AH,4CHINT 21HCODE ENDSEND START23设计思路:(1) 用EQU伪指令获得需转换的十进制数的个数;(2) 用双重循环。外循环控制个数,用x作为中间变量;(3) 内循环将一个3位十进制数去掉ASCII码后按位数扩大10倍再相加,保存后即存储为二进制数;(4) 分两个数组保存ASCII码表示的十进制数和转换后的二进制数。程序如下: ; 6-23.asm 将内存中用ASCII码表示的100以内的十进制数转变为二进制数data segmentscore1 db 36h,37h,20h,31h,30h,30h,38h,35h,20h,31h,30h,30h ;即67,
31、100,85,100x dw ?n equ 3 ;三位数num equ (x-score1)/n ;十进制数个数score2 dw num dup(0) ;保存转换后的二进制数data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov cx,num mov si,-2mov bx,0rept1: push cx ;保存外循环次数mov cx,nrept2: mov al,score1bx ;从score1取数cmp al,30h ;判断是否0-9jl exitcmp al,39hjg exitand ax,
32、000fh ;去掉ASCII码xchg ax,x mov dx,10 ;将ax中前一次形成的数扩大10倍mul dx xchg ax,xadd x,ax ;相加后保存到xexit: inc bx ;取下一位数loop rept2pop cx ;弹出外循环次数add si,2mov ax,xmov score2si,ax ;转换后的数据保存到score2mov x,0 loop rept1mov ah,4chint 21hcode endsend start习题七12 功能:两个字节数相加。X和BL相加保存到Y。13 功能:键盘输入的字符保存到KEY单元中,直到按回车为止。14 功能:将X单元中
33、的十六进制3AH变为十进制入栈保存,AH中为余数。先将0008H入栈,再将0005H入栈,结果为58。16PUSH AXPUSH BXMOV BX,0LET1:MOV AH,1INT 21HCMP AL,0DH ;输入回车退出JZ EXITMOV BUFFERBX,AL ;保存到BUFFERINC BXJMP LET1EXIT:POP BXPOP AXRETKEY_IN ENDP17 KEY_IN_DEC PROC PUSH AXPUSH BXMOV X,0MOV BX,0MOV SI,0LET1:MOV AH,1INT 21HCMP AL,0DH ;输入回车退出JZ EXITMOV BUFF
34、ERSI,AL ;保存到BUFFERINC SIJMP LET1EXIT:MOV CX,SI ;位数放在CXMOV SI,0LET2:MOV AL, BUFFERSISUB AL,30HMOV AH, 0XCHG AX,X ;形成十进制数MOV BX,10MUL BXXCHG AX,XADD X,AX ;保存INC SILOOP LET2POP BXPOP AXRETKEY_IN _DEC ENDP23 calcu procpush axpush bxpush simov ax,0mov al,xand al,aljns zzneg almov fuhao,-zz:mov si,0mov bx
35、,10 ;将ax变为十进制数真值let1:mov dx,0inc si ;统计余数个数idiv bxmov ysi, dx ;在y单元保存余数cmp ax,0jnz let1pop sipop bxpop axretcalcu endp30 DATA SEGMENTA DB 9,-8,-7,6,5B DB -8,7,6,-5,4SUM1 DB ?SUM2 DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV CX,5MOV SI,OFFSET ACALL LADDMOV SUM1,BLMOV S
36、I,OFFSET BCALL LADDMOV SUM2,BLMOV AH,4CHINT 21HLADD PROC NEARPUSH CXPUSH AXPUSH SIXOR BL,BLNEXT: MOV AL, SIAND AL,ALJNS JJJADD BL,ALJJJ: INC SILOOP NEXTPOP SIPOP AXPOP CXRETLADD ENDPCODE ENDSEND START习题八16 宏的作用:DOS功能调用。功能号用哑元指出。17 宏的作用:两个操作数相加,结果保存在第3个数中。18 宏的作用:DOS的2号显示功能。19 宏的作用:定义VALUE数组,数组长度和初值由
37、哑元指出。20 缺少标号定义LOCAL LETT1。宏的作用:两个哑元相减,结果为负则求补。27 程序:.model small.stack 100h.codestart:input ;键盘输入add al,20h ; 大写变为小写output al ; 显示mov ah,4chint 21hend start28 程序:.model small.data alpha db Computer.codestart:display alpha ;显示字串mov ah,4chint 21hend start29 程序:.model small.stack 100h.codestart:input ;键盘输入cmp al,-jnz startneg x ;求补mov ah,4chint 21hend start30 程序:.model small.stack 100h.codestart:input ;键盘输入mov bl,alinput ;输入第2个数add al,blmov ah,0aaa ;非压缩BCD码加法调整add ax,3030h output ah ;显示高位output al ;显示低位mov ah,4chint 21hend start【精品文档】第 11 页
限制150内