MOV BX,2080H MOV CX,8 TEMP: MOV DX,[BX] ;此循环用来保存被覆盖的8个内存单元 MOV ES:[DI],DX ;的数据,放在ES段中 INC DI INC BX
DEC CX JNZ TEMP
MOV DI,2080H ;给后40个内存单元循环赋值, MOV BX,50H ;从偏移量2080H开始。 MOV CX,28H
LOOP2: MOV [DI],BX INC BX INC DI
DEC CX JNZ LOOP2 MOV SI,00H ;交换40个字节内容 MOV DI,00H MOV CX,28H R: MOV BL,[SI+2060H] MOV BH,[DI+2080H] MOV [DI+2080H],BL MOV [SI+2060H],BH INC SI INC DI
DEC CX JNZ R
CODE ENDS END
实验内容3:如果X>50,转移到TOO-HIGH,在TOO-HIGH中将X显示出来; 如果带 符号减法X-Y引起溢出,则转移到OVERFLOW,在OVERFLOW中将 X、Y和X-Y的结果显示出来; 否则,计算|X-Y| ,并将结果存放在RESULT 中。(其中,X,Y,RESULT均为字变量) 代码:
DATA SEGMENT DAI DB 'X =:$' DAI2 DB 'Y =:$' DAI3 DB '|X-Y| =:$' X DW -32768 Y DW 32 RESULT DW 0 DATA ENDS
STACKS SEGMENT DW 128 DUP(?) STACKS ENDS CODE SEGMENT
ASSUME DS:DATA,CS:CODE START:
MOV AX,DATA MOV DS,AX
MOV AX,X
CMP AX , 50 ;比较
JG TOO-HIGH ;如果(X)大于50,则转向 TOO-HIGH SUB AX,Y
JO OVERFLOW ;溢出则转移 JNS NONNEG ;无符号,则转
NEG AX ;X—Y为正时,补码为其本身,为负时取补码刚好是它的相反数。 NONNEG: MOV RESULT , AX ;无溢出,取绝对值,并将结果存入RESULT HLT ;暂停
TOO-HIGH:
MOV DX,OFFSET DAI MOV AH,09H INT 21H MOV AX,X;取内存数到AX
CALL SHOW1 ;显示十进制形式 MOV AH,7 ;暂停 INT 21H
MOV AX,4C00H ;退出程序 INT 21H
SHOW1:
XOR CX ,CX MOV BX ,10 NX1:
XOR DX,DX DIV BX
OR DX,0e30H INC CX PUSH DX CMP AX,0 JNZ NX1 NX2: POP AX INT 10H
LOOP NX2 RET
OVERFLOW: MOV DX,OFFSET DAI ;显示X MOV AH,09H INT 21H MOV AX,X;取内存数到AX
CALL SHOW2 ;显示十进制形式
MOV DX,OFFSET DAI2
MOV AH,7 ;暂停 INT 21H
MOV AX,4C00H ;退出程序 INT 21H SHOW2:
XOR CX ,CX MOV BX ,10 NX3:
XOR DX,DX DIV BX
OR DX,0e30H INC CX PUSH DX CMP AX,0 JNZ NX3 NX4: POP AX INT 10H LOOP NX4 MOV DL,0AH MOV AH,02H INT 21H ;显示Y MOV AH,09H INT 21H MOV AX,Y;取内存数到AX
CALL SHOW3 ;显示十进制形式 MOV AH,7 ;暂停 INT 21H
MOV AX,4C00H ;退出程序 INT 21H SHOW3:
XOR CX ,CX MOV BX ,10 NX5:
XOR DX,DX DIV BX
OR DX,0e30H INC CX PUSH DX CMP AX,0 JNZ NX5 NX6: POP AX INT 10H LOOP NX6 MOV DL,0AH MOV AH,02H INT 21H MOV DX,OFFSET DAI3 MOV AH,09H INT 21H MOV BX ,X SUB BX,Y MOV X,BX
MOV AX,X;取内存数到AX
CALL SHOW4 ;显示十进制形式 MOV AH,7 ;暂停 INT 21H
MOV AX,4C00H ;退出程序 INT 21H SHOW4:
XOR CX ,CX MOV BX ,10 NX7:
XOR DX,DX DIV BX
OR DX,0e30H INC CX PUSH DX CMP AX,0 JNZ NX7 NX8: POP AX INT 10H LOOP NX8
;显示|X-Y|
HLT CODE ENDS END START
【实验总结】
内容一和内容二相对来说比较好理解,通过看一些实例,我们最终知道了应该怎么做,而内容三比较复杂,我们用了许多时间,不过最后经过组内的学习和讨论,终于做出来了。我们都从中收获到了许多新知识。
实验四内存块移动实验
组长: 谭浩敏 组员:刘赏源,陈润强
一、 实验目的
1、熟悉实验系统的编程和使用。
2、了解内存的移动方法。 3、加深对存储器读写的认识。
二、 实验内容
实验内容1:用汇编语言编写程序实现以下运算,并将最终结果显示在屏幕上。假设变量X、Y、Z、V均为有符号的16位二进制。
(V-(X*Y+Z-540))/X
代码:
DATA SEGMENT
DAI1 DB 0AH,0DH,'INPUT X,Y,Z,V ORDERLY, EG:+XXXX:$' DAI2 DB 0AH,0DH,'TYPE IN THE NUMBER:$' DAI3 DB 0AH,0DH,'NUMBER X,Y,Z,V ARE : $' DAI4 DB 0AH,0DH,'RESULT W IS:$' DAI5 DB 0AH,0DH,'EXTRA IS:$' BUF DB 10
DB 0 NUM DB 200 DUP(0)