汇编语言课后习题答案郑晓薇.pdf_第1页
汇编语言课后习题答案郑晓薇.pdf_第2页
汇编语言课后习题答案郑晓薇.pdf_第3页
汇编语言课后习题答案郑晓薇.pdf_第4页
汇编语言课后习题答案郑晓薇.pdf_第5页
已阅读5页,还剩42页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

习题一 1 分别将下列二进制数作为无符号数和带符号数转换为十进制和十六进制数 11010011, 01110111, 10000011, 00101111 ,10101010 查看正确答案 无符号数: 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=AAH 2 十六进制运算 1A52H+4438H ,3967H2D81H, 37H12H ,1250H4H 查看正确答案 5E8AH,0BE6H,3DEH,4940H 3 将十进制数变为 8 位补码,做运算(结果用二进制、十六进制、十进制表示) 29+53, 7324, -66+82 ,-10215 查看正确答案 00011101+00110101=01010010=52H=82 01001001+11101000=00110001=31H=49 10111110+01010010=00010000=10H=16 10011010+11110001=10001011=8BH= -117 4 用压缩 BCD 码计算(结果用二进制、BCD 码、十进制表示) 29+53, 7324, 66+18 ,132+75 查看正确答案 00101001+01010011=01111100+00000110=10000010=82H=82 0111001100100100=0100111100000110=01001001=49H=49 01100110+00011000=01111110+00000110=10000100=84H=84 0000000100110010+01110101=0000000110100111+00000110 =0000001000000111=0207H=207 5 符号位扩展(字节扩展为字,字扩展为双字) 20A3H, 94H ,3456H ,7FH ,EC00H 查看正确答案 000020A3H,FF94H,00003456H,007FH,FFFFEC00H 6 若机器字长为 16 位,其无符号数表示范围是多少?带符号数表示范围是多少?分别用十进制和十六 进制表示。 查看正确答案 无符号数:065535,0000HFFFFH;带符号数:-32768+32767,8000H7FFFH 7 写出下列十六进制数所能代表的数值或编码: (1)38H (2)FFH (3)5AH (4)0DH 查看正确答案 (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 将下列十进制数分别转换为二进制、十六进制、二进制补码、压缩 BCD 码和 ASCII 码: (1)108 (2)46 (3)-15 (4)254 查看正确答案 (1) 108=01101100B=6CH,补码 01101100B,压缩 BCD 码 0000000100001000,ASCII 码 31 3038H (2) 46=00101110B=2EH,补码 00101110B,压缩 BCD 码 01000110,ASCII 码 3436H (3) 15=11110001B=F1H,补码 11110001B,ASCII 码 2D3135H (4) 254=0000000011111110B=00FEH,补码 0000000011111110B,压缩 BCD 码 000000100 1010100,ASCII 码 323534H 9 写出下列算式的二进制运算结果,标志位 CF、SF、ZF、OF 分别是什么值? (1)56+63 (2)83-45 (3)-74+29 (4)-9237 查看正确答案 (1) 56+63=01110111B,CF=0,SF=0,ZF=0,OF=0 (2) 83-45=00100110B,CF=0,SF=0,ZF=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=1 10 查表,指出 ASCII 码 0DH、0AH、07H、1BH、20H、40H、50H、70H 对应的控制字符。 查看正确答案 回车、换行、响铃、ESC 键、空格键、P、p 习题二 1 写出冯 诺依曼计算机的基本特点。 2 如何解决内存速度与 CPU 速度不匹配问题。 3 写出计算机总线的分类与作用。 4 简述 8086CPU 寄存器的分组及各自的作用。 5 标志寄存器中都有哪些标志位与计算结果有关? 6 简述逻辑地址与物理地址的概念,两者的关系。 7 存储器为什么要分段?如何分段。 8 8086 系统把存储器分为哪四种类型的段?各自的特点是什么。 9 8086CPU 的地址线为 20 根,寻址空间为 1MB。最少可划分为多少个逻辑段?最多呢? 查看正确答案 最少划分为 16 个逻辑段,最多划分为 65536 个逻辑段(每段 16 个字节) 10 在四种类型的段中通常使用哪些寄存器表示逻辑地址? 查看正确答案 CS:IP,DS:BX、SI、DI,ES:BX、SI、DI,SS:SP、BP 11 字节单元和字单元如何区分?若给出一个地址,如何知道要访问的是字节单元还是字单元? 查看正确答案 字节单元保存 8 位数,字单元保存 16 位数。根据源操作数的属性确定要访问的是字节单元还是字单元。 12 偶地址单元和奇地址单元在保存数据上有区别吗? 查看正确答案 对于字节单元来说, 偶地址和奇地址一样; 对于字单元而言, 最好用偶地址保存, 可减少 CPU 的访存次数。 13 有一个 32K 字节的存储区,首地址是 3302:5AC8H,写出其首单元和末单元的物理地址。 查看正确答案 首单元的物理地址=38AE8H,末单元的物理地址=38AE8H+7FFFH=40AE7H 14 什么是有效地址?如何获得有效地址。 15 存储单元地址和内容表示如下,请画出存储单元存放形式。 (1) (1280A)=3456H (2) (20021H)=4DH (3) (33450H)=37A520D1H 16 根据逻辑地址计算出物理地址,并解释逻辑地址与物理地址的对应关系。 (1) 2389:3DE9H (2) 1230:EC92H (3) 14D9:C202H 查看正确答案 (1)物理地址=27679H (2) 物理地址=20F92H (3) 物理地址=20F92H (2)和(3)的物理地址是一样的。说明逻辑地址不唯一,多个逻辑地址可对应到同一个物理单元上。 17 给出段地址和偏移地址如下,计算出对应的物理地址。 (CS)=54C3H,(ES)=2569H,(DS)=1200H,(SS)=4422H, (BX)=5678H,(SP)=9945H,(IP)=0E54H,(DI)=63B1H 查看正确答案 代码段 CS:IP 的物理地址=55A84H 堆栈段 SS:SP 的物理地址=4DB65H 数据段 DS:BX 的物理地址=17678H 附加段 ES:DI 的物理地址=2BA41H 18 已知堆栈区大小为 512 字节,栈底单元的物理地址为 15230H。将两个字入栈保存后,当前栈指针 所指单元的物理地址是多少? 堆栈区中还能保存多少个数据? 查看正确答案 当前栈指针所指单元的物理地址是 1522CH。堆栈区中还能保存 254 个字。 19 写出修改当前数据段 200H 开始的数据区数据的 DEBUG 命令。 查看正确答案 执行 E 200 20 对当前代码段从 100H 开始反汇编的 DEBUG 命令是什么? 查看正确答案 执行 U 100 21 在 DEBUG 下,要将寄存器 CX 的值修改为 100H,应该执行什么命令? 查看正确答案 执行 R CX,然后输入 100 22 在 DEBUG 下,怎样将数据段的 0 号4 号字节单元填入a、b、c、d? 查看正确答案 执行 E DS:0 a b c d 习题三 1 名词解释:零地址指令,一地址指令,二地址指令。 2 分别写出与数据有关的 7 种寻址方式并举例说明。 3 已知(BX)=1290H,(SI)=348AH,(DI)=2976H,(BP)=6756H,(DS)=2E92H,(ES)=4D82 H,(SS)=2030H,请指出下列指令的寻址方式,并求出有效地址 EA 和物理地址: MOV AX,BX MOV AX,1290H MOV AX,BX MOV AX,DS:1290H MOV AX,BP MOV DIBX,AX MOV ES:SI,AX 查看正确答案 MOV AX,BX 源操作数为寄存器寻址,EA 无,物理地址 无 MOV AX,1290H 立即寻址,EA 无,物理地址 无 MOV AX,BX 寄存器间接寻址,EA=1290H, 物理地址=2FBB0H MOV AX,DS:1290H 直接寻址,EA=1290H, 物理地址=2FBB0H MOV AX,BP 寄存器间接寻址,EA=6756H, 物理地址=26A56H MOV DIBX,AX 目的操作数为基址变址寻址,EA=3C06H, 物理地址=32526H MOV ES:SI,AX 寄存器间接寻址,EA=348AH, 物理地址=50CAAH 4 寄存器间接寻址方式可以使用哪些寄存器作为间址寄存器? 5 立即寻址方式和寄存器寻址方式的操作数有物理地址吗? 6 什么是段超越?段超越前缀代表什么? 7 请指出下列指令的错误: MOV AX,CX MOV AL,1200H MOV AL,BX MOV SIDI,AX MOV ES:DX,CX MOV AX,VALUE MOV COUNT,SI 查看正确答案 MOV AX,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) 把 BX 寄存器的值传送给 AX (2) 将立即数 15 送入 CL 寄存器 (3) 用 BX 寄存器间接寻址方式将存储单元中的字与 AX 寄存器的值相加,结果在 AX 中 (4) 把 AL 中的字节写入用基址变址寻址的存储单元中 (5) 用 SI 寄存器和位移量 VALUE 的寄存器相对寻址方式,从存储单元中读出一个字送入寄存器 AX (6) 将 AX 中的数与偏移地址为 2000H 存储单元的数相减,结果在 AX 中 查看正确答案 (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:2000H 9 写出用下列寻址方式将存储单元 X 中的第 3 个字取出,AX 与其相加再放入 Y 单元的指令序列。 (1)直接寻址 (2)寄存器相对寻址 (3)基址变址 查看正确答案 (1) ADD AX,X+4 MOV Y,AX (2) MOV BX,4 ADD AX,XBX MOV Y,AX (3) MOV BX,4 MOV SI,OFFSET X ADD AX,BX+SI MOV Y,AX 10 在数据寻址方式中,哪种寻址方式的操作数与指令一起存放在代码段? 查看正确答案 立即寻址方式中操作数(立即数)和指令一起存放在代码段中。 习题四 1 汇编语言程序有什么特点?什么是源程序? 2 简要说明从源程序到可执行程序的操作过程。 3 什么是伪指令?汇编指令与伪指令有何区别?写出 4 种常用的伪指令。 4 8086 指令系统分为哪几类?举例说明算术运算类指令的用法。 5 在 8086 汇编语言中,哪些段寄存器可以用 MOV 指令赋值,哪些段寄存器不允许? 6 堆栈段寄存器 SS 和栈指针 SP 可以修改吗?如何修改? 7 入栈指令 PUSH 和出栈指令 POP 可以保存字节数据吗?要保存的话,如何实现? 8 有哪些方法可以获得操作数的有效地址? 9 解释下列伪指令的作用: (1) ASSUME CS:CODE,DS:DATA (2) END START (3) VALUE DW 12,35,-6 (4) STRING DB INPUT: (5) MESS DB 5 DUP(?) (6) XX DD 12345678H (7) ORG 0320H (8) CONT EQU 2*3.14 10 根据题目,写出相关伪指令: (1) 定义数据段 DATA,并在数据段中定义两个字单元 X、Y,初始值都是 0 (2) 定义一个字符串 SRING,保存Computer (3) 定义有 100 个字节单元的 COUNT 数组,初始值均为空 (4) 用赋值伪指令定义 PI 为 3.14 (5) 用类型操作符 LABEL 将 VALUE 单元定义为字节型 查看正确答案 (1) DATA SEGMENT X DW 0 Y DW 0 DATA ENDS (2) STRING DB Computer (3) COUNT DB 100 DUP(?) (4) PI EQU 3.14 (5) VALUE LABEL BYTE 11 下列伪指令有错吗?如果有错,请指出错误原因: (1) X1 DB 35H,0,-80 (2) X2 DB 35,260,-1 (3) X3 DB 1234H (4) X4 DW 100 (5) X5 DW 100(?) (6) X6 DD AB 查看正确答案 (1)对。(2)错。260 超出了字节范围。(3)错。X3 是字节型,1234H 是字型,不匹配。 (4)对。(5)错。缺少 DUP。(6)对。 12 写出下列指令的执行结果: TABLE DB 3,33,33 H (1) MOV AL,TABLE (2) MOV AX,WORD PTR TABLE (3) MOV DX,OFFSET TABLE (4) MOV CL,TABLE+2 (5) MOV BX,SEG TABLE (6) MOV BX,TYPE TABLE (7) LEA DX,TABLE 查看正确答案 (1)AL=3。(2)AX=2103H。(3)DX=TABLE 的偏移地址。(4)CL=33H (5)BX=TABLE 的段地址。(6)BX=1。(7)DX= TABLE 的偏移地址。 13 写出指令序列,分别求两个双精度数 20125D68H 和 100349A6H 的相加和相减运算。 查看正确答案 MOV DX,2012H MOV AX,5D68H MOV CX,1003H MOV BX,49A6H ADD AX,BX (SUB AX,BX) ADC DX,CX (SBB DX,CX) 14 写出将 DX、AX 中的 32 位无符号数减 CX 中的 16 位无符号数,结果存放在 DX、AX 中的指令序 列。 查看正确答案 SUB AX,CX SBB DX,0 15 写出将 extra 段的段地址传送给 ES 寄存器的指令序列。 查看正确答案 MOV AX,extra MOV ES,AX 16 根据给出的算式,写出指令序列(设 X、Y、W 为字节型,Z 为字型): (1) Z=5(X16) (2) Z=X/4Y (3) Z=8XY/16W2 (4) Z= (XY)(XY) X/Y 查看正确答案 (1) MOV AL,16 ADD AL,X MOV BL,5 IMUL BL MOV Z,AX (2) MOV BL,4 MOV AL,X IDIV BL SUB AL,Y MOV Z,AX (3) MOV AL,X MOV BL,8 IMUL BL MOV DX,AX MOV AH,0 MOV AL,Y MOV BL,16 IDIV BL CBW ADD DX,AX MOV AH,0 MOV AL,W IMUL AL SUB DX,AX MOV Z,DX (4) MOV AL,X ADD AL,Y MOV BL,X SUB BL,Y MOV AH,0 IMUL BL MOV Z,AX MOV AL,X IDIV Y CBW SUB Z,AX 17 分析下列程序段执行情况,给出结果: X DB 5,15,30 Y DB 22,14,6 Z DW ? MOV BX,OFFSET X MOV AL,BX ADD AL,Y INC BX SUB AL,BX MOV BL,Y+1 IMUL BL MOV Z,AX 查看正确答案 Z= (5+22-15)*14= 168 18 源程序在汇编过程中,系统是如何获知程序从哪儿开始执行的? 查看正确答案 从伪指令 END START 处获知程序从 START 标号开始。 19 两个数 8576H 和 9988H, 分别作减法和加法运算, 写出指令及运算结果。 运算结果影响哪些标志? 查看正确答案 (1)减法: (2) 加法: MOV AX,8576H MOV AX,8576H MOV BX,9988H MOV BX,9988H SUB AX,BX ADD AX,BX 结果:AX=EBEEH 结果:AX=1EFEH CF=1,OF=0,ZF=0,SF=1 CF=1,OF=1,ZF=0,SF=0 20 乘法和除法指令对于字和字节操作是如何进行的? 21 写出指令,用压缩 BCD 码实现下列运算: (1) Y1=56+34 (2) Y2=12835 (3) Y3=68+2345 查看正确答案 (1) MOV AL,56H MOV BL,34H ADD AL,BL DAA MOV Y1,AL (2) MOV AX,128H MOV BX,35H SUB AX,BX DAS MOV Y2,AL (3) MOV AL,68H MOV BL,23H ADD AL,BL MOV BL,45H SUB AL,BL DAS MOV Y3,AL 22 写出指令,用非压缩 BCD 码实现下列运算: (1) Z1=78+46 (2) Z2=9527 (3) Z3=12633 (4) Z4=(74+18)/6 查看正确答案 (1) MOV AX,0708H MOV BX,0406H ADD AL,BL ADD AH,BH ;不用带进位加 AAA ;加法调整,含进位调整 MOV BX,AX XCHG AH,AL ;高 4 位调整 AAA MOV BH,AL MOV Z1,BX ;保存十位、各位,百位在 CF 中 (2) MOV AX,0905H MOV BX,0207H SUB AL,BL SUB AH,BH ;不用带借位减 AAS ;减法调整 MOV Z2,AX (3) MOV AX,0102H MOV BX,0006H MUL BX ;乘法先不用调整 MOV BX,0303H SUB AX,BX AAS ;减法调整 MOV Z3,AX (4) MOV AX,0704H MOV BX,0108H ADD AL,BL ADD AH,BH AAA ;加法调整 MOV BL,6 AAD ;除法调整 DIV BL MOV BH,AH ;余数保存在 BH AND AX,000FH AAA ;商调整 MOV Z4,AX ;保存商 23 编程序。从键盘输入一个数字,去掉 ASCII 码后保存到 BUFF 单元。 查看正确答案 .model small .data buff db ? .code start: mov ax,data mov ds,ax mov ah,1 ;键盘输入 int 21h sub al,30h ;去掉 ASCII 码 mov buff,al mov ah,4ch int 21h end start 24 编程序。将键盘输入的小写字母变为大写字母显示在屏幕上。 查看正确答案 .model small .code start: mov ah,1 ;键盘输入 int 21h sub al,20h ;变为大写 mov dl,al mov ah,2 int 21h mov ah,4ch int 21h end start 25 X 和 Y 都是字节型数据,编写将两数相加的结果显示出来的程序段。 查看正确答案 .model small .data x db 12h y db 34h .code start: mov ax,data mov ds,ax mov al,x add al,y ;结果为 46H mov ah,al ;AH=46H and al,0fh ;AL=06H mov cl,4 rol ah,cl ;AH=64H and ah,0fh ;AH=04H add ax,3030h ;AX=3436H mov bx,ax mov dl,bh ;显示 4 mov ah,2 int 21h mov dl,bl ;显示 6 int 21h mov ah,4ch int 21h end start 26 编写程序,建立一个 09 的平方根表,查表可得某数的平方根。 查看正确答案 data segment x db 0.000,1.000,1.414,1.732,2.000 db 2.236,2.449,2.646,2.828,3.000 ;建立字符表 y db 5 dup(?) ;存放查到平方根 u db 3 ;要查的数 data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov al,u ;要查的数 mov cl,5 mul cl ;u*5=15(号单元开始) mov ah,0 mov bx,ax ;地址保存到 bx mov si,0 let1: mov al,xbx ;取出平方根数字 mov ysi,al ;存入 y inc si inc bx loop let1 ;循环取出 5 次 mov ah,4ch int 21h code ends end start 27 编写查表程序。建立一个班级姓名表,给出学号,可显示出其姓名。 查看正确答案 .model small .data x1 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,data mov ds,ax mov al,u ;给出学号 mov cl,10 mul cl ;u*10=30(号单元开始) mov ah,0 mov dx,ax ;地址保存到 dx mov ah,9 ;9 号功能显示字符串 int 21h mov ah,4ch int 21h end start 28 编程实现公式计算 Z=X/4+16Y。 查看正确答案 .model small .data x db 4 y db 6 z db ? .code start: mov ax,data mov ds,ax mov al,x ; mov cl,2 sar al,cl ; X/4 mov cl,4 mov bl,y sal bl,cl ;16Y add al,bl ;X/4+16Y mov z,al mov ah,4ch int 21h end start 29 编写程序段,将 AL 中的数乘以 6,与 CL 相减后再除以 3;把商保存到 Y 单元,余数保存到 Y+1 单元。 查看正确答案 .model small .data y db ?,? .code start: mov ax,data mov ds,ax mov al,3 ;设 al=3 mov cl,6 mul cl ;al*6 mov cl,4 ;设 cl=4 sub al,cl ;相减 mov bl,3 idiv bl ; /3 mov y,al ;商 mov y+1,ah ;余数 mov ah,4ch int 21h end start 30 用简化的程序格式编程序,在屏幕的 5 行 12 列上显示红底白字的字符串“Come”。 习题五 1 转移指令分为哪两大类?转移指令的操作码和操作数如何表示? 2 写出与转移地址有关的寻址方式。 3 根据标志位转移的指令有哪些?执行什么操作时可以改变标志? 4 简述 CPU 实现分支的过程。 5 在短转移格式下,指令跳转的范围是多少? 6 在比较转移指令之前可以用什么指令进行判断? 7 比较转移指令为什么要分为无符号数比较和带符号数比较两类? 8 汇编语言可以控制和改变二进制某一位。有哪些指令可执行位操作? 9 TEST 指令是如何实现判断的?请举例说明。 10 移位指令影响标志位吗?影响哪些标志位? 11 已知(BX)=7890H,写出指令实现逻辑左移 2 位。请问哪个标志位改变了? 查看正确答案 进位标志 CF=1 12 分析下列程序段,给出执行结果: MOV AX,1234H MOV CL,3 SAR AX,CL AND AX,0FH ADD AL,30H MOV DL,AL MOV AH,2 INT 21H 查看正确答案 先把 AX 的值除以 8 等于 0246H,再把高 12 位屏蔽为 0,剩下 AL=06H 加上 30H 变为 ASCII 码显示 出来。 13 试说明下列程序段完成了什么操作? MOV AX,X MOV BX,Y CMP AX,0 JGE AA1 NEG AX JMP AA2 AA1: SUB AX,BX AA2: MOV Z,AX 查看正确答案 判断 X0,是,Z=X-Y;否则 Z=X 的绝对值 14 指出下列指令的错误所在。 (1) AND SI,3 (2) SUB DS,AX (3) PUSH 5 (4) OR 80H,AL (5) CMP BX,TABLE (6) ROL AL,3 查看正确答案 (1) 目的操作数是存储单元时,要用 PTR 伪操作指出单元的属性 (2)DS 段寄存器使用非法 (3)立即 数使用非法 (4) 目的操作数不允许是立即数 (5) 两个操作数不允许都是存储单元 (6)移位次数超过1要 用 CL 表示。 15 写出将 AL.4 清零的指令。(AL 中除第 4 位外的其他位保持不变)。 查看正确答案 AND AL,11011111B 16 分别指出每条指令执行结果: MOV AL,37H (1) AND AL,0F0H (2) OR AL,03H (3) NOT AL (4) XOR AL,0FH 查看正确答案 (1) AL=30H (2) AL=B7H (3) AL=C8H (4)AL=38H 17 简述操作系统对可执行程序的加载和执行过程。 18 PSP 程序段前缀是什么时候建立的?占用多大内存空间?保存了什么内容、作用是什么? 19 转移指令中的标号在汇编时被翻译成什么值?这种方法的优点是什么? 20 无条件转移指令 JMP $+2 作用是什么?其转移地址是多少? 21 什么是分支表?怎样用分支表实现多路分支? 22 哪些逻辑指令可以使操作数清零?请写出指令。 23 用逻辑指令实现将 AX 的低 4 位清 0。 24 用移位指令实现 AX 的高 8 位和低 8 位交换。 25 写出判断一个操作数是否为负数的程序段。 26 写出程序段。判断字节单元 X 中的数是否为偶数,是偶数则显示Y,否则显示N。 27 分支程序设计。完成如下公式的计算,请写出程序。 (X+3)/2 X0 Y= 0 X=0 X4 X0 Y= 0 X=0 X4 X0 程序如下: DATA SEGMENT X DB 23 Y DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AL,X CMP AL,0 JE SUB2 JG SUB1 MOV CL,2 SAL AL,CL JMP SHORT SUB2 SUB1:ADD AL,3 SAR AL,1 SUB2: MOV Y,AL MOV AH,4CH INT 21H CODE ENDS END START 28 设 X、Y、Z 为字节单元。如果 X0,Z=4X-Y/16,否则,Z=X 的绝对值。编程序实现。 查看正确答案 设 X、Y、Z 为字节单元。如果 X0,Z=4X-Y/16,否则,Z=X 的绝对值。编程序实现。 程序如下: DATA SEGMENT X DB 3 Y DB 5 Z DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,X CMP AL,0 JL SS1 MOV CL,2 SAL AL,CL MOV BL,Y MOV CL,4 SAR BL,CL SUB AL,BL JMP OUT1 SS1: NEG AL OUT1: MOV Z,AL MOV AH,4CH INT 21H CODE ENDS END START 29 字数组 M 中有 10 个数据,分类统计其中正数、负数、0 的个数,分别存入 POSI、NEGA、ZERO 单元。 查看正确答案 字数组 M 中有 10 个数据,分类统计其中正数、负数、0 的个数,分别存入 POSI、NEGA、ZERO 单元。 程序如下: DATA1 SEGMENT M DW 21,-34,32,112,-324,0,76,0,48,50 POSI DW ? NEGA DW ? ZERO DW ? DATA1 ENDS CODE1 SEGMENT ASSUME CS: CODE1,DS:DATA1 START: MOV AX,DATA1 MOV DS,AX MOV CX,10 LEA SI,M AGAIN: CMP WORD PTR SI,0 JL LOWER JE EQUAL INC POSI JMP LPP1 LOWER: INC NEGA JMP LPP1 EQUAL: INC ZERO LPP1: ADD SI,2 DEC CX JNZ AGAIN MOV AH,4CH INT 21H CODE1 ENDS END START 30 试编写程序,从键盘接收一英文单词,以空格结束,将其存入 BUF 开始的存储单元中,并在最后加 上字符串结束符$。 查看正确答案 试编写程序,从键盘接收一英文单词,以空格结束,将其存入 BUF 开始的存储单元中,并在最后加上字符 串结束符$。 主要程序部分: LEA BX,BUF LOP: MOV AH,1 INT 21H CMP AL,20H JE NEXT MOV BX,AL INC BX JMP LOP NEXT: MOV BYTE PTRBX,$ 31 编程。将 AX 寄存器中的 16 位数分成 4 组,每组 4 位,从低到高分别放在 AL,BL,CL,DL 中。 查看正确答案 编程。将 AX 寄存器中的 16 位数分成 4 组,每组 4 位,从低到高分别放在 AL,BL,CL,DL 中。 程序段: START:MOV AX,1234H MOV BX,AX AND AL,0FH ;4 AND BL,0F0H ;3 AND AH,0FH MOV CL,AH ;2 AND BH,0F0H MOV DL,BH ;1 习题六 1 循环指令有哪几种?分别写出指令格式及作用。 2 循环指令根据什么判断循环是否结束? 3 用转移指令能否构成循环?试举例说明。 4 多重循环的循环控制如何实现? 5 在多重循环中转移指令的使用要注意哪些问题? 6 串处理过程中用到循环了吗?怎么使用的? 7 列出学过的串处理指令。 8 在串处理过程中,如何找到源串和目的串? 9 串处理指令都应和哪些重复前缀配合使用?请举例说明。 10 在串处理中,方向标志 DF 的作用是什么?方向标志如何设置? 11 写出下列程序段的执行结果。 BUFF DB 10,22,14,6,31 TOTAL DB ? MOV BX,OFFSET BUFF MOV CX,TOTAL-BUFF MOV AL,0 AA1: ADD AL,BX INC BX LOOP AA1 MOV TOTAL,AL 查看正确答案 累加和 TOTAL=83 12 分析下列程序段的功能。 X DB 2,-3,15,0,9,4 LEA BX,X MOV CX,6 MOV AX,0 AA2:MOV AL,BX CMP AL,0 JNE NEXT INC AH NEXT:INC BX LOOP AA2 查看正确答案 循环统计 X 中 0 的个数 13 判断下列程序段能否完成给定功能。如有错误,请指出并改正。 (1)统计 AL 中 1 的个数。要求 AL 保持原值。 MOV BL,0 MOV CX,8 BB1:RCL AL,1 JNC NEXT INC BL NEXT:LOOP BB1 (2)在 ALPHA 中查找字母”T”,找到后退出循环。 ALPHA DB “ERTYU” MOV BX,OFFSET ALPHA MOV CX,5 BB2:CMP BX,T LOOPNE BB2 查看正确答案 (1) 将 BB1:RCL AL,1 改为 BB1:ROL AL,1 (2) 将 BB2:CMP BX,T LOOPNE BB2 改为: DEC BX BB2:INC BX CMP BX,T LOOPNE BB2 14 源串 STRG1 和目的串 STRG2 分别放在数据段和附加段中,请写出含有各种段定义的程序段,完成 将 STRG1 传送到 STRG2 的功能。 15 写出计算 Y=12+34+56+78+910 的程序段。 查看正确答案 计算 Y=12+34+56+78+910 的程序段答案: MOV AL,1 MOV BL,2 MOV DX,0 MOV CX,5 AA1:MUL BL ADD DX,AX INC BL MOV AL,BL INC BL LOOP AA1 16 写程序。查找 CATT 表中的字符”,找到后将 SIGN 单元置 1,否则 SIGN 单元置 0。 查看正确答案 写程序段。查找 CATT 表中的字符”,找到后将 SIGN 单元置 1,否则 SIGN 单元置 0。 catt db asdddd sign db ? mov ax,extra mov es,ax mov sign,0 mov al, lea di,catt cld mov cx,7 repnz scasb jcxz nee mov sign,1 nee: mov ah,4ch int 21h 17 写程序段。在长度为 N 的字数组 VALUE 中统计负数的个数并保存到 AX 中。 查看正确答案 写程序段。在长度为 N 的字数组 VALUE 中统计负数的个数并保存到 AX 中。 value dw 2,-4,-5,3,6,6,-8 n equ ($-value)/2 ;元素个数 start: mov ax,data mov ds,ax mov cx,n mov bx,0 mov ax,0 rept1: mov si,valuebx ;取出元素 cmp si,0 jge let1 ;0 转 let1 inc ax ;为负数,ax 加 1 let1: add bx,2 loop rept1 18 编程。从键盘输入一个数字,在屏幕上显示出以该数字开始的 10 个数字串。 查看正确答案 从键盘输入一个数字,在屏幕上显示出以该数字开始 10 个数字串。 CODE SEGMENT ASSUME CS:CODE START: MOV AH,1 INT 21H MOV CX,10 MOV BL,AL REPT1: CMP BL,9 JLE NEXT SUB BL,10 NEXT: MOV DL,BL MOV AH,2 INT 21H INC BL LOOP REPT1 MOV AH,4CH INT 21H CODE ENDS END START 19 编程。比较两个字符串是否相同,统计并显示出相同的字符个数和不同的字符个数。 查看正确答案 data segment bunch1 db stadent bunch2 db studEnt data ends code segment assume cs:code,ds:data,es:data start: mov ax,data mov ds,ax mov es,ax lea si,bunch1 lea di,bunch2 mov bx,0 ;bh=相同的个数,bl=不同的个数 mov cx,7 let1: mov al,si cmp al,di ;两字符比较 jz equl ;相同转 equl inc bl ;不同 bl 加 1 jmp out1 equl: inc bh out1:inc si inc di loop let1 mov dl,n ;显示n,代表不同 mov ah,2h int 21h add bl,30h ;加上 ASCII 码 mov dl,bl ;显示不同的个数 int 21h mov dl,e ;显示e,代表相同 int 21h add bh,30h mov dl,bh ;显示相同的个数 int 21h mov ah,4ch int 21h code ends end start 20 编程。在 FOUND 字数组中找出最小数存入 MIN 单元。 21 STRI 单元存有 10 个字符的字符串,以 0 结尾,编程去掉其中的空格符,并将后续字符向前递补。 查看正确答案 DATA SEGMENT STR DB SDABF G H0 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX LEA DI,STR SPACE:MOV CX,10 MOV AL,DI CMP AL,0 JE OUT CMP AL,20H JE DELETE JMP EXIT SUB CX,DI MOV SI,DI DELETE: MOV BL,SI+1 MOV SI,BL INC SI LOOP DELETE EXIT:JMP SPACE OUT:MOV AH,4CH INT 21H CODE ENDS END START 22 某班级 30 名学生,编程序将全班成绩按升序排序。 23 将内存中用 ASCII 码表示的 100 以内的十进制数转变为二进制数。十进制数不够 3 位以 20H(空 格)补齐。 查看正确答案 设计思路: (1) 用 EQU 伪指令获得需转换的十进制数的个数; (2) 用双重循环。外循环控制个数,用 x 作为中间变量; (3) 内循环将一个 3 位十进制数去掉 ASCII 码后按位数扩大 10 倍再相加,保存后即存储为二进制数; (4) 分两个数组保存 ASCII 码表示的十进制数和转换后的二进制数。 程序如下: ; 6-23.asm 将内存中用 ASCII 码表示的 100 以内的十进制数转变为二进制数 data segment score1 db 36h,37h,20h,31h,30h,30h,38h,35h,20h,31h,30h,30h ;即 67,100,85,100 x dw ? n equ 3 ;三位数 num equ (x-score1)/n ;十进制数个数 score2 dw num dup(0) ;保存转换后的二进制数 data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov cx,num mov si,-2 mov bx,0 rept1: push cx ;保存外循环次数 mov cx,n rept2: mov al,score1bx ;从 score1 取数 cmp al,30h ;判断是否 0-9 jl exit cmp al,39h jg exit and ax,000fh ;去掉 ASCII 码 xchg ax,x mov dx,10 ;将 ax 中前一次形成的数扩大 10 倍 mul dx xchg ax,x add x,ax ;相加后保存到 x exit: inc bx ;取下一位数 loop rept2 pop cx ;弹出外循环次数 add si,2 mov ax,x mov score2si,ax ;转换后的数据保存到 score2 mov x,0 loop rept1 mov ah,4ch int 21h code ends end start 习题七 1 在汇编语言中,主程序是如何调用子程序的? 2 怎样才能正确地从子程序返回到主程序,先决条件是什么? 3 子程序名代表什么含义?子程序名是断点吗?为什么? 4 什么叫做跨段调用?从子程序调用指令 CALL 中能得知是跨段调用吗? 5 CALL 指令如何将断点入栈保存的? 6 RET 指令在何处使用?RET 指令执行了哪些操作? 7 CALL 指令为什么必须和 RET 指令成对使用? 8 为什么要用过程定义伪指令 PR

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论