您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页微机段

微机段

来源:五一七教育网
NO. 0,3,6,9:

1. 下列变量各占多少字节? A1 DW 23H,5876H A2 DB 3 DUP(?),0AH,0DH, ‘$’ A3 DD 5 DUP(1234H, 5670H) A4 DB 4 DUP(3 DUP(1, 2,’ABC’)) 答:A1 占4 个字节 A2 占6 个字节 A3 占40 个字节 A4 占60 个字节

2. 编程序统计N个学生的《微机原理》成绩,分别归类90 分~99 分,80 分~ 分,70 分~79 分,60分~69 分及60 分以下,并将各段的人数送入内存单元中。 答:设学生人数为字节,成绩为压缩BCD 码,且都是合法的。 DATA SEGMENT

BUFF DB XXH,……. ANUM EQU $-BUFF ;总人数 SNUM DB 5 DUP(0) ;存放各类成绩统计结果 BUFF1 DB ANUM DUP(0) ;存放60 分以下成绩 BUFF2 DB ANUM DUP(0) ;存放60 分~69 分成绩 BUFF3 DB ANUM DUP(0) ;存放70 分~79 分成绩 BUFF4 DB ANUM DUP(0) ;存放80 分~ 分成绩 BUFF5 DB ANUM DUP(0) ;存放90 分以上成绩 DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS: DATA,ES: DATA START: MOV AX, DATA

MOV DS,AX MOV ES,AX

MOV CL,ANUM ;取学生人数 MOV CH,0 MOV BH,0

MOV SI,OFFSET BUFF MOV DI,OFFSET SNUM D1: MOV AL,[SI]

CMP AL,60H JAE NEXT1 ;大于等于60,转next1 MOV BL,[DI]

MOV BUFF1[BX],AL INC BYTE PTR [DI] JMP NEXT5

NEXT1: CMP AL,69H

JA NEXT2 ;大于69转next2 MOV BL,[DI+1]

MOV BUFF2[BX],AL

INC BYTE PTR [DI+1] JMP NEXT5

NEXT2: CMP AL,79H

JA NEXT3 ;大于79转next3 MOV BL,[DI+2]

MOV BUFF2[BX],AL INC BYTE PTR [DI+2] JMP NEXT5

NEXT3: CMP AL,H

JA NEXT4 ;大于转next4 MOV BL,[DI+3]

MOV BUFF3[BX],AL INC BYTE PTR [DI+3] JMP NEXT5

NEXT4: MOV BL,[DI+4]

MOV BUFF4[BX],AL INC BYTE PTR [DI+4] NEXT5: INC SI

LOOP D1

MOV AH,4CH INT 21H CODE ENDS END START

3.在附加段中有一个首地址为BUF的未经排序的字数组。在数组的第一个字中存放该数组的长度N,数组的首地址已存放在DI寄存器中,AX寄存器中存放一个数M。要求编制一程序,在数组中查找该数,若找到此数,则把它从数组中删除。 答:DATA SEGMENT

BUF DW N,**H,**H,……**H ;假设一个数组 S_NUM EQU M ;查找的数M DATA ENDS CODE SEGMENT ……

DEL_M PROC NEAR CLD

PUSH DI

MOV CX,ES:[DI] ;取元素个数 ADD DI,2

REPNE SCASW ;串扫描,查找数是否在串中 JE DELETE ;若在,则转去删除 POP DI ;若不在,则结束 JMP SHORT EXIT DELETE:JCXZ DEC_CNT

NEXT_EL:MOV BX,ES:[DI] ;后面的数依次往前移 MOV ES:[DI-2],BX

ADD DI,2

LOOP NEXT_EL DEC_CNT:POP DI

DEC WORD PTR ES:[DI] EXIT:RET DEL_M ENDP ......

NO. 1,4,7:

1.假设程序中的数据定义如下: PAR DW ?

PNAME DB 16 DUP(?) COUNT DD ?

PLENTH EQU $-PAR

求PLENTH 的值为多少?表示什么意义?

答:PAR 的偏移地址为0,PLENTH 当前偏移地址$=2+16+4=22, $-PAR=22,故PLENTH 的值为22。

若在PLENTH 所在行有变量定义,则$表示该变量的偏移地址,即$表示PLENTH 所在行的当前偏移地址。故PLENTH 表示从当前行到PAR 之间定义的变量所占的字节个数。 2. 在附加段有一个数组,首地址为BUFF,数组中第一个字节存放了数组的长度。编一个程序在数组中查找0,找到后把它从数组中删去,后续项向前压缩,其余部分补0。 答:DATA SEGMENT

BUFF DB 10, 1,0,2,3,4,0,5,6,7,0 ;10 个数 M EQU 0 DATA ENDS CODE SEGMENT

ASSUME CS:CODE, ES:DATA, DS:DATA START: MOV AX, DATA ; 初始化ES,DS

MOV ES, AX MOV DS, AX MOV AL, M ; 关键字M 存入AL MOV DI, OFFSET BUFF MOV CL, [DI] ; 数组长度存入CX MOV CH, 0 INC DI ;指向数组起始地址 CLD ;清方向标志 L1: REPNE SCASB ;重复搜索关键字

JNZ STOP ; 未找到,转STOP 结束 JCXZ STOP ; 最后一个数是M,转STOP PUSH DI ;关键字下一单元地址和循 PUSH CX ;环次数入栈保护 DEL: MOV BL, [DI] ; 前移,末尾补0

MOV [DI-1], BL INC DI LOOP DEL

MOV BYTE PTR[DI-1], 0 POP CX ; 恢复CX,DI POP DI

DEC DI ; 由于REPNE SCASB 已自动加1 JMP L1

STOP: MOV AH, 4CH

INT 21H CODE ENDS END START

3.设有数组X和Y。X数组中有X1,….,X10;Y数组中有Y1,…,Y10。试编程计算Z1=X1+Y1,Z2=X2+Y2,Z3=X3-Y3,Z4=X4-Y4,Z5=X5-Y5,Z6=X6+Y6,Z7=X7-Y7,Z8=X8-Y8,Z9=X9+Y9,Z10= X10+Y10,结果存入Z数组。 答:DATA SEGMENT

X DW X1,X2,X3,X4,……,X10 ;假设X数组

Y DW Y1,Y2,……………,Y10 ; 假设Y数组 Z DW Z1,Z2,…………….,Z10 ; 假设Z数组

FLAG_MEM DW 00DCH ;假设做十次操作的10个标志位,低位开始0为

加法1为减法,最高6位没意义

DATA ENDS CODE SEGMENT

ASSUME CS:CODE, DS:DATA START:PUSH DS SUB AX,AX ;AX清0 PUSH AX MOV AX,DATA MOV DS,AX MOV BX,0 MOV CX,10 MOV DX,FLAG_MEM NEXT:MOV AX,X[BX] SHR DX,1 JC SUBTRACT ADD AX,Y[BX] JMP SHORT RESULT SUBTRACT:SUB AX,Y[BX] RESULT:MOV Z[BX],AX ADD BX,2

LOOP NEXT RET

CODE ENDS END START

NO. 2,5,8:

1. 对于下面的数据定义,各条MOV 指令执行后,有关寄存器的内容是什么?

DA1 DB ?

DA2 DW 10 DUP(?) DA3 DB ‘ABCD’ MOV AX, TYPE DA1 MOV BX, SIZE DA2 MOV CX, LENGTH DA3 答:AX=1,BX=20,CX=1

2.设ARRAY是10个元素的数组,每个元素是8位数据。试用子程序计算数组元素的检验和,并将结果存入变量result中。所谓“校验和“是指不记进位的累加,常用于检查信息的正确性。

答:DATA SEGMENT

COUNT EQU 10 ;数组元素个数 ARRAY DB **H,**H,**H,……**H ;假设一个数组 RESULT DB ? ;校验和 DATA ENDS CODE SEGMENT MAIN PROC FAR

……

START:MOV BX,OFFSET ARRAY MOV CX,COUNT CALL CHECKSUM ;调用子过程 MOV RESULT,AL MAIN ENDP

CHECKSUM PROC ;子过程 XOR AL,AL SUM:ADD AL,[BX]

INC BX LOOP SUM RET

CHECKSUM ENDP CODE ENDS END START

3.现有一个以“$”结尾的字符串,要求剔除其中的空格字符,并将后续字符前移一个字符位置。

答:DATA SEGMENT

STRING DB ‘THIS IS A STRING!’ , ’$’ ;假设一个字符串 DATA ENDS CODE SEGMENT

……

MOV SI, OFFSET STRING

OUTLP: CMP BYTE PTR[SI],’$’ ;外循环,先判断后循环 JZ DONE ;为0结束

CMP BYTE PTR [SI] , ’ ‘ ;检测是否为空格

JNZ NEXT ;不是则继续循环 MOV DI,SI ;若是,进入删除空格分支,该分支是循环程序段 INLP :INC DI MOV AL,[DI] ;前移一个位置 MOV [DI-1],AL CMP BYTE PTR [DI],’$’ ;内循环,先循环后判断 JNZ INLP JMP OUTLP NEXT :INC SI ;继续对后续字符进行判断处理 JMP OUTLP

DONE :EXIT CODE ENDS END START

;结束

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务