试编写一程序,将外部数据区DATA1单元开始的50个单节数逐一依

题目

试编写一程序,将外部数据区DATA1单元开始的50个单节数逐一依次移动到内部RAM中DATA2单元开始的数据区中。

如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

数控加工编程的步骤是()。

  • A、加工工艺分析,数学处理,编写程序清单,程序检验和首件试切,制备控制介质
  • B、加工工艺分析,数学处理,编写程序清单,制备控制介质,程序检验和首件试切
  • C、加工工艺分析,编写程序清单,数学处理,制备控制介质,程序检验和首件试切
  • D、数学处理,程序检验和首件试切,制备控制介质,编写程序清单

正确答案:B

第2题:

编写程序,求20元素无符号字数组ARRAY中最小的奇数,存入ODD单元,如果不存在奇数,将ODD单元清零。


正确答案: DATASEGEMNT
ARRAY
DW 56,12,88,126,5,16,32,99,72,18
DW 116,34,92,32,156,42,816,16,15,218
ODD DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV BX,0
MOV ODD,65535;将65535假设为最小的奇数
LEA SI,ARRAY
MOV CX,20
AGAIN:
MOV AX,[SI]
TEST AX,1;测试是否为奇数
JZ SKIP;不是奇数跳过
INC BX;记录奇数个数
CMP AX,ODD;奇数与预设的最小奇数比较
JGE SKIP;大于预设奇数,跳过
MOV ODD,AX;小于预设奇数,保留
SKIP:ADD SI,2
LOOP AGAIN
CMP BX,0;判有无出现过奇数
JNZ DONE
MOV ODD,0;未出现过,把ODD单元清零
DONE://MOV AX,4C00H
INT 21H
CODEENDS
END START

第3题:

执行下列程序段后,DATA1单元的值为( ) DATA1 DB 10H,20H DATA2 DB 30H,40H MOV AX,WORD PTR DATA1 CMP AX,WORD PTR DATA2 JA L MOV BX,WORD PTR DATA2 MOV WORD PTR DATA2,AX MOV WORD PTR DATA1,BX L:HLT

A.40H

B.30H

C.20H

D.10H


正确答案:B
解析:在本题中,DATA1中存放的是字节10H,20H。DATA2中存放的是字节30H,40H。执行MOVAX,WORDPTRDATA1后,DATA1的内容转换为字的形式。下一条是把DATA2转换为字后进行比较。JA的作用是两个无符号数比较,高于或不低于不等于转移。在本题中20H30H,所以不转移,继续执行下面的指令,下面的指令的作用是把DATA1的值和DATA2的值换过来,所以DATA1的值是30H。

第4题:

程序计数器用于存储(),可以从0开始计数(每次加1或加一个固定的数),以支持程序的()执行;也可以将外部数据装入其中,以支持程序()操作。


正确答案:下一条要执行指令的地址;顺序;跳转

第5题:

一个由27个字节组成的数据区,其起始地址为BA00H:1BA0H,试写错该数据区的末单元地址。


正确答案:末地址=BA000H+1BA0H+1BH-1=BBBBAH,1BH是27的十六进制数。

第6题:

在MSC-51单片机程序中用伪指令DB定义的字节数据存放在()

  • A、片内RAM
  • B、程序存储器
  • C、外部RAM
  • D、片内位寻址区

正确答案:B

第7题:

有一个由20个字组成的数据区,其起始地址为610AH:1CE7H。试写出该数据区首末单元的实际地址。


正确答案: 首单元地址:610A0H+1CE7H=62D87H
末单元地址:62D87H+27H=62DAEH

第8题:

请编制程序PROC1.ASM,其功能是:内存中有一个ASCII字符串(从S0URCE开始存放),试将其中所有连续的回车与换行符(0DH,0AH)置换成单个回车符(0DH)。字符串以00H结尾,长度(包括00H)不超过100个字节。

例如:字符串41H,42H,0DH,0AH,43H,00H

转换为41H,42H,0DH,43H,00H

部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUT- PUT1.DAT中。请编写BECIN到END之间的代码。对程序必须进行汇编,并与IO.OBJ连接产生PROC1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。

部分源程序如下:

EXTRN LOAD:FAR,SAVE:FAR

N EQU 100

STAC SEGMENT STACK

DB 128 DUP (?)

STAC ENDS

DATA SEGMENT

SOURCE DB N DUP (0)

RESULT DB N DUP (0)

NAME0 DB 'INPUT1. DAT', 0

NAME1 DB 'OUTPUT1. DAT', 0

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA, SS:STAC

START PROC FAR

PUSH DS

XOR AX, AX

PUSH AX

MOV AX, DATA

MOV DS, AX

LEA DX, SOURCE ; 数据区起始地址

LEA SI, NAME0 ; 原始数据文件名

MOV CX,N ; 字节数

CALL LOAD ; 从"INPUT1.DAT"中读取数据

**** BEGIN ****

***** END *****

LEA DX, RFSULT ; 结果数据区首址

LEA SI, NAME1 ; 结果文件名

MOV CX,N ; 结果字节数

CALL SAVE

RET

START ENDP

CODE ENDS

END START

编程思路:

第一步:分析程序要求的功能。

本程序需要完成以下功能。

(1)据文件INPUT1.DAT中读取100个ASCII码存放在SOURCE开始的内存单元中。

(2)将SOURCE开始的100个字单元中的ASCII码,将0DH后的0AH删除,并将结果存放在RFSULT开始的内存单元中。

(3)将结果存放在OUTPUT1.DAT中。

第二步:用相应的汇编程序来实现其功能。

(1) 数据的读取和存入文件部分的实现,题目中已经给出。

(2) 如果是将数据在原地进行处理,那么每删除一个数据就要将其后面的所有数据向前移动一个位置,如果直接将扫描处理完毕的数据复制到结果地址中,将会节省移动数据的开销;

因为要删除0DH后面的0AH,所以,在扫描数组的过程中除了要了解当前数据元素的内容还要了解前一个数据的内容。解决方法可使用标志单元记录前一个数据是否为 0DH,然后当前数据元素根据标志单元的内容决定当前元素是否复制到结果中;也可在扫描数组的过程中,如果碰到一个0DH,则进入不同的程序段,这个程序段决定是否将当前数据元素复制到结果中。我们的参考答案采用了后一种方法。


正确答案:LEA SISOURCE LEA DIRESULT LO MOV AL[SI] CMP AL0 JZ QUIT ;如果当前字符为0则结束 MOV [DI]AL ;不为0则复制到目的地址 INC SI INC DI CMP AL0DH ;当前字符若为ODH则进入L1状态 JE L1 JMP LO L1:MOV AH[SI] ;在前一个字符为ODH的情况下判断当前字符是符为OAH若为OAH则不将OAH复制到目的地址 CMP AH0AH JEN LO INC SI JMP LO ;重复处理下一个字符 QUIT
LEA SI,SOURCE LEA DI,RESULT LO MOV AL,[SI] CMP AL,0 JZ QUIT ;如果当前字符为0,则结束 MOV [DI],AL ;不为0则复制到目的地址 INC SI INC DI CMP AL,0DH ;当前字符若为ODH,则进入L1状态 JE L1 JMP LO L1:MOV AH,[SI] ;在前一个字符为ODH的情况下,判断当前字符是符为OAH,若为OAH则不将OAH复制到目的地址 CMP AH,0AH JEN LO INC SI JMP LO ;重复处理下一个字符 QUIT

第9题:

在外部RAM中BLOCK开始的单元中有一数据块,数据长度为LEN,试编程统计其中的正数、负数和零的个数分别存入内部RAM的Pcount、Mcoun和Zcount单元。


正确答案: M.CS51
>                 1  ORG 0H
2  LEN EQU #10 ;  数据块长度
3  PCOUNT EQU #30H
4  MCOUNT EQU #31H
5  ZCOUNT EQU #32H
6  BLOCK EQU #40H
0000  7840      7  MOV R0,BLOCK ; BLOCK首地址
0002  790A      8  MOV R1,LEN
0004  E6        9 LOOP: MOV A,@R0
0005  C3        10  CLR C
0006  B40004    11  CJNE A,#0H,SULT1
0009  0532      12  INC 32H
000B  8009      13  SJMP SULT2
000D  33        14 SULT1: RLC A;     移出符号位以判断正负!
000E  4004      15  JC NEG
0010  0530      16  INC 30H
0012  8002      17  SJMP SULT2
0014  0531      18 NEG:// INC 31H
0016  08        19 SULT2: INC R0
0017  D9EB      20 DJNZ R1,LOOP

第10题:

有一个由10个字组成的数据区,其起始地址为1200H:0120H。试写出该数据区的首末存储单元的实际地址。


正确答案:12120H~12120H+10*2-1=12133H

更多相关问题