1、微机原理习题4答案习题4:请编写完整汇编程序:1. 内存中以BUF单元开始存放8个16位二进制数,试编程将8个数倒序后存放于BUF开始的单元,试编程;(提示:采用堆栈实现)DATA SEGMENTORG 0000HBUF DW 1111H,2222H,3333H,4444H,5555H,6666H,7777H,8888HCOUNT EQU ($-BUF)/2DATA ENDSSTACK1 SEGMENT STACK DW 256 DUP(0)STACK1 ENDSCODE SEGMENT ASSUME CS:CODE,SS:STACK1,DS:DATASTART: MOV AX,DATA MO
2、V DS,AX MOV AX,STACK1 MOV SS,AX LEA SI,BUF MOV CX,COUNTLOP1: MOV AX,SI PUSH AX INC SI INC SI LOOP LOP1 LEA SI,BUF MOV CX,COUNTLOP2: POP AX MOV SI,AX INC SI INC SI LOOP LOP2CODE ENDS END START2. 将8个16位无符号数相加,结果保存在32位无符号数SUM中;DATA SEGMENTBUF DW 1111H,2222H,3333H,4444H,5555H,6666H,7777H,8888HCOUNT EQU
3、($-BUF)/2SUM DD 0DATA ENDSSTACK1 SEGMENT STACK DW 100 DUP(0)STACK1 ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1START: MOV AX,DATA MOV DS,AX LEA BX,BUF MOV CX,COUNT MOV DX,0000HLOP: MOV AX,BX ADD WORD PTR SUM,AX ADC WORD PTR SUM+2,DX INC BX INC BX LOOP LOP MOV AX,4C00H INT 21HCODE ENDS END START
4、3. 以十进制形式在计算机屏幕上显示内存中的一个8位有符号数,例如:若内存单元中存放的数据为7FH,则在屏幕上显示+127,若内存单元存放的数据为0FFH,则应在屏幕上显示-1;DATA SEGMENT VAR DB 0FFH STR1 DB THE RESULT IS: $DATA ENDSSS_SEG SEGMENT STACK DW 100 DUP(0)SS_SEG ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:SS_SEGSTART: MOV AX, DATA MOV DS, AX LEA DX,STR1 MOV AH,09H INT 21H
5、 MOV DL, + CMP VAR, 0 JGE NEXT MOV DL, - NEG VAR NEXT: MOV AH,02H INT 21H MOV AL, VAR MOV BL, 10 MOV CL,0LOP1: AND AH,0 DIV BL PUSH AX INC CL CMP AL,0 JNZ LOP1LOP2: POP AX MOV DL,AH ADD DL,30H MOV AH,2 INT 21H LOOP LOP2 MOV AX, 4C00H INT 21H CODE ENDS END START4. 从键盘输入一个4位十进制数,然后以16进制形式显示在屏幕上,试编程;例如
6、:输入1 0 2 4 在屏幕上应该显示0400HDATA SEGMENT STR1 DB INPUT DATA: $ BUF DB 20 DB 4 DB 4 DUP(?) STR2 DB 0AH,0DH,THE RESULT IS: ,$ DATA ENDSSS_SEG SEGMENT STACK DB 100 DUP(0)SS_SEG ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:SS_SEGSTART: MOV AX, DATA MOV DS, AX LEA DX,STR1 MOV AH,09H INT 21H MOV AH,0AH LEA DX
7、,BUF INT 21H MOV CX,03H LEA SI,BUF+2 AND BX,0H MOV DL,0AHLOP1: MOV AL,SI SUB AL,30H PUSH CXLOP2: MUL DL LOOP LOP2 POP CX ADD BX,AX INC SI LOOP LOP1 AND CH,00H MOV CL,SI SUB CL,30H ADD BX,CX LEA DX,STR2 MOV AH,09H INT 21H MOV AX,BX AND CH,00H MOV CL,04H MOV DH,04H MOV DL,00HAAA1: AND AX,000FH PUSH AX
8、 DEC DH INC DL SHR BX,CL MOV AX,BX CMP DH,0 JA AAA1 MOV CL,DLBBB: POP DX CMP DL,09H JB NEXT ADD DL,07H NEXT: ADD DL,30H MOV AH,2 INT 21H LOOP BBB MOV DL,H MOV AH,02H INT 21H MOV AX,4C00H INT 21HCODE ENDS END START 5. 数据段中存放有一个无符号字数据VAR,将其转换成非压缩格式的BCD码,存于BUF开始的单元中(高位在前);例如:若VAR为0800H,则转换后(BUF) = 20H
9、(BUF+1) = 48HDATA SEGMENT PARA VAR DW 0800H BUF DB 2 DUP(0)DATA ENDSSS_SEG SEGMENT STACK DW 100 DUP(0)SS_SEG ENDSCODE SEGMENT PARA ASSUME CS:CODE, DS:DATA, SS:SS_SEGSTART: MOV AX, DATA MOV DS, AX MOV CX, 16 MAIN1: SHL VAR, 1 MOV BX, 4 PUSH CX MOV CX, 5MAIN2: MOV AL, BUFBX ADC AL, AL AAA MOV BUFBX, A
10、L DEC BX LOOP MAIN2 POP CX LOOP MAIN1 EXIT: MOV AX, 4C00H INT 21H CODE ENDS END START6. 内存中以str1和str2开始分别存放了两个字符串,结束符为NULL(ASCII码为0),将str2连接到str1后,形成1个字符串,并将连接后的字符串str1输出到屏幕上;DATA SEGMENT STR1 DB GOOD MORNING,00H STR DB 50 DUP(0) STR2 DB Mr WANG!,0AH,0DH,00HDATA ENDSSS_SEG SEGMENT STACK DW 100 DUP(0
11、)SS_SEG ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:SS_SEGSTART: MOV AX,DATA MOV DS,AX LEA SI,STR1 MOV AL,SI CMP AL,00H JE JP1JP2: INC SI MOV AL,SI CMP AL,00H JA JP2 JP1: MOV CX,01H LEA BX,STR2 MOV AH,BX MOV BX,AH CMP AH,00H JE JP3 MOV SI,AHJP4: INC SI INC BX INC CX MOV AH,BX MOV SI,AH CMP AH,00H J
12、A JP4JP3: INC SI MOV SI,BYTE PTR $ LEA DX,STR1 MOV AH,09H INT 21H MOV AX,4C00H INT 21HCODE ENDS END START 7. 统计10个有符号字节数中,大于0、小于0、等于0的个数,分别存放在NUM1、NUM2、NUM3三个变量中,并找出最大值、最小值分别存放到MAX、MIN变量中,再求10个数的和,将结果存放到16位有符号数SUM中。DATA SEGMENT NUM DB 0F0H,03H,0B4H,0AH,0AAH,00H,80H,7FH,99H,21H COUNT EQU ($-NUM) ORG
13、0010H NUM1 DB 0 NUM2 DB 0 NUM3 DB 0 MIN DB 0 MAX DB 0 SUM DW 0DATA ENDSSS_SEG SEGMENT STACK DW 100 DUP(0)SS_SEG ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:SS_SEGSTART: MOV AX,DATA MOV DS,AX MOV SS,AX LEA SI,NUM MOV CX,COUNT MOV BX,0000H MOV DX,0000HLOP: MOV AL,SI INC SI CMP AL,0 JG DA JL XIAO JE D
14、ENGDA: INC BH JMP AAA1XIAO: INC BL JMP AAA1 DENG: INC DH AAA1: LOOP LOP LEA SI,NUM1 MOV SI,BH LEA SI,NUM2 MOV SI,BL LEA SI,NUM3 MOV SI,DH MOV CX,COUNT-1MAIN1: LEA BX,NUM PUSH CXMAIN2: MOV AL,BX INC BX CMP AL,BX JLE NEXT XCHG AL,BX MOV BX-1,ALNEXT: LOOP MAIN2 POP CX LOOP MAIN1 LEA SI,MIN MOV AL,NUM M
15、OV SI,AL LEA SI,MAX MOV BL,NUM+9 MOV SI,BL MOV SI,OFFSET NUM MOV CX,COUNT MOV AX,0LOP2: AND BX,0 MOV BL,SI ADD AX,BX INC SI LOOP LOP2 LEA SI,SUM MOV SI,AX MOV AX,4C00H INT 21HCODE ENDS END START 8 若程序的数据段定义如下,写出各指令语句独立执行后的结果。DSEG SEGMENTDATA1 DB 10H, 20H, 30HDATA2 DW 10 DUP (?)String DB 123DSEG ENDS
16、(1) MOV AL, DATA1 10H-AL(2) MOV BX, offset DATA2 DATA2代表的首地址赋给BX(3) LEA SI, String String代表的首地址赋给BXADD DI,SI SI+DI-DI9 假设数据项定义如下:DATA1 DB HELLO!GOOD MORNINGDATA2 DB 20 DUP(?)用串操作指令编写程序段,使其分别完成一下功能。(1) 从左到右将DATA1中的字符串传送到DATA2中;LEA SI,DATA1LEA DI,DATA2MOV CX,20CLDREP MOVSB(2) 传送完后,比较DATA1和DATA2中的内容是否相
17、同;LEA SI,DATA1LEA DI,DATA2MOV CX,20CLDREPE CMPSB(3) 把DATA1中的第3个字节和第四个字节装入AX;LEA SI,DATA1ADD SI,2LODSW(4) 将AX的内容存入DATA2+5开始的字节单元中;LEA DI,DATA2ADD DI,5STOSW10 执行下列指令后,AX寄存器中的内容是多少?TABLE DW 10,20,30,40,50ENTRY DW 3MOV BX, Offset TABLEADD BX, ENTRYMOV AX,BX AX=1400H存储器11 图示以下数据段在存储器中的存放形式;10H34H07H09H42
18、H00H42H00H48H45H4CH4CH4FH21HCDHABH00H00HDATA SEGMENT DATA1DB 10H, 34H, 07H, 09H DATA2DW 2 DUP(42H) DATA3 DB HELLO!DATA4 EQU 12DATA5 DD ABCDHDATA ENDS12 阅读下边的程序段,试说明它实现的功能是什么?DATA SEGMENTDATA1 DB ABCDEFGDATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATAAAAA: MOV AX,DATA MOV DS,AX MOV BX, OFFSET DATA1 MOV CX,7NEXT: MOV AH,2 MOV AL, BX XCHG AL,DLINC BXINT 21HLOOP NEXTMOV AH,4CHINT 21HCODE ENDS END AAAA此程序功能为:输出字符串ABCDEFG。
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2