华电保定微机原理汇编实验(共48页).doc
精选优质文档-倾情为你奉上实验一 、数据块传送1. 将数据段中2000H单元开始存放的10个数(8位数)传送到3000H开始的10个字节中。源程序:DATAS SEGMENT ;此处输入数据段代码 ORG 2000H DATA1 DB 1,2,3,4,5,6,7,8,9,10 ORG 3000H DATA2 DB 10 DUP(0)DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 MOV SI,2000H MOV DI,3000H MOV CX,10NEXT:MOV AL,SI MOV DI,AL INC SI INC DI DEC CX JNZ NEXT MOV AH,4CH INT 21HCODES ENDS END START运行结果:2. 将数据段中2000H单元开始存放的10个数(16位数)传送到3000H开始的10个字中。源程序:DATAS SEGMENT ;此处输入数据段代码 ORG 2000H DATA1 DW 1,2,3,4,5,6,7,8,9,10 ORG 3000H DATA2 DW 10 DUP(0) DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 MOV SI,2000H MOV DI,3000H MOV CX,10NEXT:MOV AX,SI MOV DI,AX ADD SI,2 ADD DI,2 DEC CX JNZ NEXT MOV AH,4CH INT 21HCODES ENDS END START运行后:3. 将数据DATA1中的10个字节数据传送到数据段DATA2中源数据:DATAS SEGMENT ;此处输入数据段代码 DATA1 DB 1,2,3,4,5,6,7,8,9,10 ORG 1000H DATA2 DB 10 DUP(0)DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 LEA SI,DATA1 LEA DI,DATA2 MOV CX,10NEXT:MOV AL,SI MOV DI,AL INC SI INC DI DEC CX JNZ NEXT MOV AH,4CH INT 21HCODES ENDS END START初始值:运行后:4. 将数据段中2000H开始的20个数据传送到2010H开始的20个单元中。源程序:DATAS SEGMENT ;此处输入数据段代码 ORG 2000H DATA1 DB 5 DUP(1,2,3,4,5,6) DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 MOV SI,2000H MOV DI,2100H MOV CX,20NEXT1:MOV AL,SI MOV DI,AL INC SI INC DI DEC CX JNZ NEXT1 MOV SI,2100H MOV DI,2010H MOV CX,20NEXT2:MOV AL,SI MOV DI,AL INC SI INC DI DEC CX JNZ NEXT2 MOV AH,4CH INT 21HCODES ENDS END START运行结果:实验二 查表实验目的:熟悉实验环境;熟练掌握查表程序1. 已知015的平方值表,查表求X的平方值,送到Y单元,用两种方法DATAS SEGMENT ;此处输入数据段代码 TABLE DB 0, 1,4,9,16,25,36,49,64,81,100,121,144,169,196,255 X DB 3 Y DB 0DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 LEA BX,TABLE MOV AL,X MOV AH,0 ADD BX,AX MOV AL,BX MOV Y,AL MOV AH,4CH INT 21HCODES ENDSEND START运行结果:方法二:源程序:DATAS SEGMENT ;此处输入数据段代码 TABLE DB 0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,255 X DB 3 Y DB 0DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 LEA BX,TABLE MOV AL,X XLAT MOV Y,AL MOV AH,4CH INT 21HCODES ENDS END START运行结果2. 2已知0255的平方值表,查表求X的平方值,送到Y单元源程序DATAS SEGMENT ;此处输入数据段代码 TABLE DW 0,1,4,9,16,25,250 DUP(0) X DW 3 Y DW ?DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 LEA SI,TABLE MOV AX,X ADD AX,AX ADD BX,AX MOV AX,BX MOV Y,AX MOV AH,4CH INT 21HCODES ENDS END START运行结果实验三、计算1. 计算1234F000H+H的和源程序:DATAS SEGMENT ;此处输入数据段代码 DATA1 DD 1234F000H DATA2 DD HDATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 LEA SI,DATA1 LEA DI,DATA2 MOV AX,SI ADD AX,DI MOV SI,AX MOV AX,SI+2 ADC AX,DI+2 MOV SI+2,AX MOV AH,4CH INT 21HCODES ENDS END START运行结果2. 计算8字节数据67788H与 99AABBCCDDEEFF00H的和源程序:DATAS SEGMENT ;此处输入数据段代码 DATA1 DQ 67788H DATA2 DQ 99AABBCCDDEEFF00HDATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 LEA SI,DATA1 LEA DI,DATA2 MOV CX,4 CLCNEXT:MOV AX,SI ADC AX,DI MOV SI,AX ADD SI,2 ADD DI,2 DEC CX JNZ NEXT MOV AH,4CH INT 21HCODES ENDS END START运行结果3. 计算8字节的BCD码十进制数67788H与43322H的和源程序:DATAS SEGMENT ;此处输入数据段代码 DATA1 DB 88H,77H,66H,55H,44H,33H,22H,11H DATA2 DB 22H,33H,44H,55H,66H,77H,88H,99HDATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 LEA SI,DATA1 LEA DI,DATA2 CLC MOV CX,8NEXT:MOV AL,SI ADC AL,DI DAA MOV SI,AL INC SI INC DI DEC CX JNZ NEXT MOV AH,4CH INT 21HCODES ENDS END START运行结果4. 计算10个字节数据的和(数据自己定义)源程序:DATAS SEGMENT ;此处输入数据段代码 DATA1 DB 1,2,3,4,5,6,7,8,9,10 SUM DB 0 DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 LEA SI,DATA1 LEA DI,SUM MOV CX,10 CLCNEXT:MOV AL,SI ADC SUM,AL ADD SI,1 DEC CX JNZ NEXT MOV AH,4CH INT 21HCODES ENDS END START运行结果5. 计算10个字数据的和(数据自己定义)源程序:DATAS SEGMENT ;此处输入数据段代码 DATA1 DW 1,2,3,4,5,6,7,8,9,10 SUM DW 0 DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 LEA SI,DATA1 LEA DI,SUM MOV CX,10 CLCNEXT:MOV AX,SI ADC SUM,AX ADD SI,2 DEC CX JNZ NEXT MOV AH,4CH INT 21HCODES ENDS END START运行结果实验四、计算表达式的值1. 计算表达式的值,已知X=10,Y=5。DATAS SEGMENT ;此处输入数据段代码 X DB 10 Y DB 5 Z DB ?DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 MOV AL,X SUB AL,Y MOV BL,7 MUL BL CBW MOV BL,Y ADD BL,2 IDIV BL MOV Z,AL MOV AH,4CH INT 21HCODES ENDS END START实验五、找最大、最小数1. 找出2040H单元和2041H单元的大数,送2042H单元(数据自己定义)DATAS SEGMENT ;此处输入数据段代码 ORG 2040H DATA1 DB 11 DATA2 DB 12 DATA3 DB ?DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 MOV AL,DATA1 CMP AL,DATA2 JG GREAT MOV AL,DATA2GREAT:MOV DATA3,AL MOV AH,4CH INT 21HCODES ENDSEND START2. 找出10个数(8位数)里的最大数(数据自己定义)DATAS SEGMENT ;此处输入数据段代码 DATA DB 1,2,3,6,5,4,10,9,8,7 MAX DB ?DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 LEA BX,DATA MOV CX,9 MOV AL,BXNEXT:INC BX CMP AL,BX JG GREAT MOV AL,BXGREAT:MOV MAX,AL DEC CX JNZ NEXT MOV AH,4CH INT 21HCODES ENDS END START3. 找出10个数(8位数)里的最小数(数据自己定义)DATAS SEGMENT ;此处输入数据段代码 DATA DB 3,2,1,6,5,4,10,9,8,7 MIN DB ?DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 LEA BX,DATA MOV CX,9 MOV AL,BXNEXT:INC BX CMP AL,BX JL LESS MOV AL,BXLESS:MOV MIN,AL DEC CX JNZ NEXT MOV AH,4CH INT 21HCODES ENDS END START4. 找出10个数(16位数)里的最大数(数据自己定义)DATAS SEGMENT ;此处输入数据段代码 DATA DW 3,2,1,6,5,4,10,9,8,7 MAX DW ?DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 LEA BX,DATA MOV CX,9 MOV AX,BXNEXT:ADD BX,2 CMP AX,BX JG GREAT MOV AX,BXGREAT:MOV MAX,AX DEC CX JNZ NEXT MOV AH,4CH INT 21HCODES ENDSEND START5. 找出10个数(16位数)里的最小数(数据自己定义)DATAS SEGMENT ;此处输入数据段代码 DATA DW 3,2,1,6,5,4,10,9,8,7 MIN DW ?DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 LEA BX,DATA MOV CX,9 MOV AX,BXNEXT:ADD BX,2 CMP AX,BX JL LESS MOV AX,BXLESS:MOV MIN,AX DEC CX JNZ NEXT MOV AH,4CH INT 21HCODES ENDSEND START实验六、统计正数、负数个数1. 找出10个数(8位数)里的正数个数(数据自己定义)源程序:DATAS SEGMENT ;此处输入数据段代码 TABLE DB -1,-2,-3,-4,-5,1,2,3,4,5 NUM DB ?DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 LEA SI,TABLE MOV NUM,0 MOV CX,10NEXT2:MOV AL,SI TEST AL,80H JNZ NEXT1 INC NUMNEXT1:INC SI DEC CX JNZ NEXT2 MOV AH,4CH INT 21HCODES ENDS END START运行结果:2. 找出10个数(8位数)里的负数个数(数据自己定义)源程序:DATAS SEGMENT ;此处输入数据段代码 TABLE DB -1,-2,-3,-4,-5,1,2,3,4,5 NUM DB ?DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 LEA SI,TABLE MOV NUM,0 MOV CX,10NEXT2:MOV AL,SI TEST AL,80H JZ NEXT1 INC NUMNEXT1:INC SI DEC CX JNZ NEXT2 MOV AH,4CH INT 21HCODES ENDS END START运行结果:3. 找出10个数(16位数)里的正数个数(数据自己定义)源程序:DATAS SEGMENT ;此处输入数据段代码 TABLE DW -1,-2,-3,-4,-5,1,2,3,4,5NUM DB ?DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 LEA SI,TABLE MOV NUM,0 MOV CX,10NEXT2:MOV AX,SI TEST AX,8000H JNZ NEXT1 INC NUMNEXT1:ADD SI,2 DEC CX JNZ NEXT2 MOV AH,4CH INT 21HCODES ENDS END START运行结果:4. 找出10个数(16位数)里的负数个数(数据自己定义)源程序:DATAS SEGMENT ;此处输入数据段代码 TABLE DW -1,-2,-3,-4,-5,1,2,3,4,5NUM DB ?DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 LEA SI,TABLE MOV NUM,0 MOV CX,10NEXT2:MOV AX,SI TEST AX,8000H JZ NEXT1 INC NUMNEXT1:ADD SI,2 DEC CX JNZ NEXT2 MOV AH,4CH INT 21HCODES ENDS END START运行结果:实验七、数据块比较1. 比较数据段DS与数据段ES中的10个字节的数据是否一致?源程序:DATAS SEGMENT ;此处输入数据段代码 TABLE1 DB 1,2,3,4,5,6,7,8,9,10 N DB ? DATAS ENDSDATAB SEGMENT TABLE2 DB 1,2,3,4,5,6,8,7,9,10DATAB ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX MOV BX,DATAB MOV ES,BX ;此处输入代码段代码 LEA SI,TABLE1 LEA DI,TABLE2 CLD MOV CX,10 MOV N,0NEXT2:CMPSB JNZ NEXT1 DEC CX JNZ NEXT2 JMP EXITNEXT1:INC NEXIT:MOV AH,4CH INT 21HCODES ENDS END START运行结果:(相同N=0,不同N=1)2. 比较数据段DS与数据段ES中的10个字的数据是否一致?源程序:DATAS SEGMENT ;此处输入数据段代码 TABLE1 DW 1,2,3,4,5,6,7,8,9,10 N DB ? DATAS ENDSDATAB SEGMENT TABLE2 DW 1,2,3,4,5,6,8,7,9,10DATAB ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX MOV BX,DATAB MOV ES,BX ;此处输入代码段代码 LEA SI,TABLE1 LEA DI,TABLE2 MOV CX,10 MOV N,0 CLDNEXT2:CMPSW JNZ NEXT1 DEC CX JNZ NEXT2 JMP EXITNEXT1:INC NEXIT:MOV AH,4CH INT 21HCODES ENDS END START运行结果:(相同N=0,不同N=1)实验八、逻辑运算与移位1. 将数据段中4000H单元的内容拆开,高位送4001H低位,低位送4002H低位,4001H、4002H的高位清零,一般用于把数据送显示缓冲区时使用。源程序:DATAS SEGMENT ;此处输入数据段代码 ORG 4000H DATA1 DB 9AH DATA2 DB ? DATA3 DB ?DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 MOV AL,DATA1 AND AL,0F0H MOV CL,4 SHR AL,CL MOV DATA2,AL MOV AL,DATA1 AND AL,0FH MOV DATA3,AL MOV AH,4CH INT 21HCODES ENDS END START运行结果:2. 将4000H、4001H单元的低位送4002H单元的高、低位,一般用于将缓冲区的数据取出拼成一个字节。源程序:DATAS SEGMENT ;此处输入数据段代码 ORG 4000H DATA1 DB 9AH DATA2 DB 7BH DATA3 DB ?DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 MOV AL,DATA1 AND AL,0FH MOV CL,4 SHL AL,CL MOV DATA3,AL MOV AL,DATA2 AND AL,0FH ADD DATA3,AL MOV AH,4CH INT 21HCODES ENDS END START运行结果:实验九、输入输出1. 在显示器上输出字符串HELLO!DATAS SEGMENT ;此处输入数据段代码 STRING DB "HELLO!$" DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 LEA DX,STRING MOV AH,9 INT 21H MOV AH,4CH INT 21HCODES ENDS END START2. .从键盘输入一组字符串,存入到BUFFER数据区(自己定义)中。DATAS SEGMENT ;此处输入数据段代码 BUFFER DB 100,0,100 DUP(?) DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 LEA DX,BUFFER MOV AH,10 INT 21H MOV CL,BUFFER+1 XOR CH,CH ADD DX,CX MOV BX,DX MOV BYTE PTRBX+2,'$' MOV AH,4CH INT 21HCODES ENDSEND START3. .将内存单元存放的BCD码25H在显示器上输出(即输出字符25)。 DATAS SEGMENT ;此处输入数据段代码 DATA DB 25HDATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 LEA BX,DATA MOV AL,BX AND AL,0F0H MOV CL,4 SHR AL,CL ADD AL,30H MOV DL,AL MOV AH,2 INT 21H MOV AL,BX AND AL,0FH ADD AL,30H MOV DL,AL MOV AH,2 INT 21H MOV AH,4CH