微机原理汇编语言实例及习题
假设下列指令中的所有标识符均为类型属性为字 的变量,请指出下列指令中哪些是非法的?它们的 错误是什么? (1)MOV BP,AL (2)MOV WORD_OP[BX+4*3][DI],SP (3)MOV WORD_OPl,WORD_OP2 (4)MOV AX,WORD_OPl[DX] (5)MOV SP,SS:DATA_WORD[BX][SI] (7)MOV [BX][SI],2 (8)MOV AX,WORD_ OPl+WORD_OP2
L2:
ห้องสมุดไป่ตู้
CMP JA INC JMP L3: CMP JA INC NEXT:ADD LOOP EXIT:MOV INT CODE END
AX, 84 L3 N2 NEXT AX, 100 NEXT N3 SI, 2 AGAIN AX, 4C00H 21H ENDS START
解:(1) MOV AX,SEG DATA1 MOV DS,AX MOV AX,SEG DATA2 MOV ES,AX LEA SI,DATA1 LEA DI,DATA2 MOV CX,20 CLD REP MOVSB
(2) LEA SI,DATA1 LEA DI,DATA2 MOV CX,20 CLD REPE CMPSB 。。。
START
4.17 数组SCORE中存有一个班级40名学生的英语 课程成绩。按照0~59,60~74,75~84,85~100统 计各分数段人数,存入N0,N1, N2, N3变量内。 DATA SEGEMNT SCORE DW 40 DUP(?) ;运行前置入具体数据 N0 DW ? N1 DW ? N2 DW ? N3 DW ? DATA ENDS
(3) LEA SI,DATA1 ADD SI,2 LODSW
(4)LEA DI,DATA2 ADD DI,5 STOSW
编写循环结构程序,进行下列计算,结果 存入RESULT内存单元 1+2+3+4+5+6+ …… +100 1+3+5+7+9+11+ …… +99 2+4+6+8+10+ …… +100 1+4+7+10+13+ …… +100 11+22+33+44+ …… +99
CODE ASSUME START:MOV MOV MOV MOV MOV MOV LEA MOV AGAIN:MOV CMP JA L0: INC JMP L1: CMP JA INC JMP
SEGMENT CS: CODE, DS: DATA AX, DATA DS, AX N0, 0;各计数器清零 N1, 0 N2, 0 N3, 0 SI, SCORE CX, 40 AX, [SI] AX, 59;分段测试 L1 N0 NEXT AX, 74 L2 N1 NEXT
(5)
CODE SEGMENT ASSUME START: XOR MOV MOV AGAIN: ADD ADD LOOP MOV MOV INT CODE ENDS END
CS: CODE AX, AX CX, 9 BX, 11 AX, BX BX, 11 AGAIN RESULT, AX AX, 4C00H 21H
(2)
CODE SEGMENT ASSUME CS: CODE START: XOR AX, AX MOV CX, 50 MOV BX, 1 AGAIN: ADD AX, BX ADD BX, 2 LOOP AGAIN MOV RESULT, AX MOV AX, 4C00H INT 21H CODE ENDS END START
(1)
CODE
SEGMENT ASSUME CS: CODE START: XOR AX, AX MOV CX, 100 AGAIN: ADD AX, CX LOOP AGAIN MOV RESULT, AX MOV AX, 4C00H INT 21H CODE ENDS END START
数组ARRAY中存有10个无符号字整数(元素序号0~9),现在要删除其中的 第5个元素。编写程序,把第6~9个元素移到第5~8个元素的位置上,并把第9 个元素清零。 答: DATA SEGEMNT ARRAY DW -386, 97, 213, 21, 77, -91, 56, 7, 123, 65 DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX MOV BX, 6*2 ;第六个元素在数组内的位移 MOV CX, 4 ;循环计数器置初值 AGAIN: MOV AX, ARRAY[BX] ;取出一个元素 MOV ARRAY[BX-2], AX;向前移动一个位置 ADD BX, 2 ;修改指针 LOOP AGAIN ;循环4次 MOV ARRAY[BX], 0;最后一个元素清零 MOV AX, 4C00H INT 21H CODE ENDS END START
START
(4)
CODE SEGMENT ASSUME START: XOR MOV MOV AGAIN: ADD AX, BX ADD LOOP MOV MOV INT CODE ENDS END
CS: CODE AX, AX CX, 34 BX, 1
BX, 3 AGAIN RESULT, AX AX, 4C00H 21H START
汇编语言程序设计
上次课后作业
4.6 假设数据项定义如下: DATA1 DB ‘HELLO!GOOD MORNING!’ DATA2 DB 20 DUP(?) 用串操作指令编写程序段,使其分别完成以下功能: (1)从左到右将DATA1中的字符串传送到DATA2 中。 (2)传送完后,比较DATA1和DATA2中的内容是 否相同。 (3)把DATA1中的第3和第4个字节装入AX。 (4)将AX的内容存入DATA2+5开始的字节单元中。
(3)
CODE SEGMENT ASSUME START: XOR MOV MOV AGAIN: ADD ADD LOOP MOV MOV INT CODE ENDS END
CS: CODE AX, AX CX, 50 BX, 2 AX, BX BX, 2 AGAIN RESULT, AX AX, 4C00H 21H