本文主要是介绍微机接口技术与汇编语言上机实验报告_汇编初步(intel8086),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本文出自:blog.csdn.net/svitter
实验环境:intel x386
一。要求:将3000H单元开始置数为00H-0FH
SSTACK SEGMENT STACKDW 32 DUP(?)
SSTACK ENDSCODE SEGMENTASSUME CS:CODE, SS:SSTACK
START: PUSH DSXOR AX, AXMOV DS, AXMOV SI, 3000HMOV CX, 16
AA1: MOV [SI], ALINC SIINC ALLOOP AA1 ;CX == 0? NEXT():AA1MOV AX, 4C00H ;AH = 4C STOP CUR, RETURNINT 21H
CODE ENDSEND START
二。要求:将3500H后8位置入3600H开始的8位
有两种解法
1.
SSTACK SEGMENT STACKDW 32 DUP(?)
SSTACK ENDSCODE SEGMENTASSUME CS:CODE, SS:SSTACK
START: PUSH DSXOR AX, AX ;SET AX = 0000HMOV DS, AXCLD ;CLOSE INTERUPTEMOV SI, 3500HMOV BX, 3600HMOV CX, 8 ;FOR LOOP
AA1: MOV AL, [SI] ;REP MOVSB ;DS:[SI] -> ES:[DI], SI+1, DI+1MOV [BX], ALINC SIINC BXLOOP AA1 ;CX == 0 ? NEXT() : AA1MOV AX, 4C00HINT 21H
CODE ENDSEND START
2.
SSTACK SEGMENT STACKDW 32 DUP(?)
SSTACK ENDSCODE SEGMENTASSUME CS:CODE, SS:SSTACK
START: PUSH DSXOR AX, AX ;SET AX = 0000HMOV DS, AXCLD ;CLOSE INTERUPTEMOV ES, AXMOV SI, 3500HMOV DI, 3600HMOV CX, 8 ;FOR LOOPREP MOVSB ;DS:[SI] -> ES:[DI], SI+1, DI+1MOV AX, 4C00HINT 21H
CODE ENDSEND START
三。要求:将数据段中的str1赋给str2
DATA SEGMENTSTR1 DB 'ABCDEFGHIJKLN'COUNT EQU $-STR1 ;$的值表示count的偏移地址, 而str1是BUF所占用的字节数STR2 DB COUNT DUP(0)
DATA ENDS
SSTACK SEGMENT STACK ;!!--DEF--!汇编程序发现这是堆栈段,执行的时候会直接使SSTACK -> SSDB 200H DUP(0)
SSTACK ENDSCODE SEGMENTASSUME DS:DATA, ES:DATA, SS:SSTACK, CS:CODE ;DATA(DATA SEGMENT);ES(EXTRA DATA SEGMENT);SSTACK -> SS(STACK SEGMENT);CODE -> CS(CODE SEGMENT)
START:MOV AX, DATAMOV DS, AXMOV ES, AXLEA SI, STR1LEA DI, STR2 MOV CX, COUNTCLD ;Direction Flag to 0 (0 -> DF)
LP1: MOVSB ;DS:[SI] -> ES:[DI], SI++, DI++ DEC CX ;JNZ LP1 ;THREE SENTENCE == REP MOVESB, CX FOR COUNTMOV AH, 4CH ;MOV AX, 4C00HINT 21H
CODE ENDSEND START
二。要求:将3500H后8位置入3600H开始的8位
四。要求:使用DOS接口输出一段字符串
DATA SEGMENTMESSAGE DB 'please input your name!' , 0DH, 0AH, '$'
DATA ENDS
CODE SEGMENT
START: MOV AH, 09HMOV DX, SEG MESSAGEMOV DS, DXMOV DX, OFFSET MESSAGEINT 21H...
CODE ENDS
这篇关于微机接口技术与汇编语言上机实验报告_汇编初步(intel8086)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!