1、找到一段起始地址为sa:0000(即起始地址的偏移地址为0)的容量足够的空闲内存区。
2、在这段内存区的前256个字节中,创建一个称为程序段前缀(psp)的数据区,dos利用psp来和被加载程序进行通信。
3、从这段内存区的256字节处开始(在psp的后面),将程序装入,程序的地址被设为sa+10h:0;空闲内存区从sa:0开始,0~255字节为psp,从256字节处开始存放程序,为更好地区分psp和程序,dos将划分到不同的段中,如下这样的地址安排:
空闲内存区:sa:0
psp区:sa:0
程序区:sa+10h:0
注意:psp区和程序区虽然物理地址连续,却有不同的段地址。
4、将该内存区的段地址(sa)存入ds中,初始化其它相关寄存器后,设置cs:ip指向程序的入口(sa+10h:0)。
你等我
DATANUM=10 ;设有10个数据
STACK SEGMENMT STACK ‘STACK’
DW 100H DUP()
TOP LABEL WORD
STACK ENDS
DATA SEGMENT
DATABUF DW DATANUM
DB DATANUM DUP(?)
DATA EDATANUMDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AX,STACK
MOV SS,AX
LEA SP,TOP
; 取出随机数据
MOV CX,DATABUF
LEA SI,DATABUF+2
MOV BL,23
MOV AL,11
LP:
MOV [SI],AL
INC SI
ADD AL,BL
LOOP LP
; 数据排序
MOV CX,DATABUF
DEC CX
LEA SI,DATABUF+2
ADD SI,CX
LP1:
PUSH CX
PUSH SI
LP2:
MOV AL,[SI]
CMP AL,[SI-1]
JAE NOXCHG
XCHG AL,[SI-1]
MOV [SI],AL
NOXCHG:
DEC SI
LOOP LP2
POP SI
POP CX
LOOP LP1
;数据排序结束
MOV AH,4CH ;返回DOS
MOV AL,0
IDATANUMT 21H
CODE ENDS
END START
我这个连中断都用上了
第二题
PUSH PSW ;保护现场
PUSH A
CLR C ;进位标志位清零
MOV DATA,DATA2
MOV A,DATA1
SUBB A,DATA ;求Yn-1 -Yn
JNC COMPARE ;如果Yn-1 -Yn≥0,转COMPARE
CPL A ;如果Yn-1 -Yn<0, 求补
INC A
COMPARE: CLR C
SUBB A,LIMIT ;│Yn-Yn-1│和△y比较
JC OVER ;如果│Yn-Yn-1│≤△y,DATA2→DATA
MOV DATA,DATA1 ;如果│Yn-Yn-1│>△y,DATA1→DATA
OVER: POP A ;恢复现场
POP PSW
RET ;返回
这个作为参考,是MCS的
;入口 :A,SDAT,DELTY
;占用资源:B
;堆栈需求:2字节
;出口 :A
JUGFILT :MOV B,A
CLR C
SUBB A,SDAT
JNC JUGFT1
CPL A
INC A
JUGFT1 :SETB A
SUBB A,#DELTY
JNC JUGFT3
MOV A,SDAT
RET
JUGFT3 :MOV A,B
MOV SDAT,A
RET
;中位值滤波程序
;入口 :ADDPH,ADDPL,N
;占用资源:ESELSORT
;堆栈需求:4字节
;出口 :A
MEDFILT :LCALL ESELSORT
MOV A,N
CLR C
RRC A
ADD A,ADDPL
MOV DPL,A
MOV A,ADDPH
MOV DPH,A
JNC MEDFT1
INC DPH
MEDFT1 :MOVX A,@DPTR
RET
;N点算术平均滤波
;入口 :ADDPH,ADDPL,N
;占用资源:B,R3,R4
;堆栈需求:2字节
;出口 :A
AVFILT :MOV A,ADDPL
MOV DPL,A
MOV A,ADDPH
MOV DPH,A
CLR A
MOV R3,A
MOV R4,A
MOV R7,N
AVFT1 :MOVX A,@DPTR
INC DPTR
ADD A,R4
MOV R4,A
JNC AVFT2
INC R3
AVFT2 :DJNZ R7,AVFT1
MOV R7,N
MOV R2,#00H
LCALL NDIV31
MOV A,R4
RET
;N点加权平均滤波
;入口 :ADDPH,ADDPL,N
;占用资源:B,R3,R4
;堆栈需求:2字节
;出口 :A
QAVFILT :CLR A
MOV R3,A
MOV R4,A
MOV R7,N
MOV P2,ADDPH
MOV R1,ADDPL
MOV DPTR,#QAVTAB
QAVFT1 :MOVC A,@A+DPTR
MOV B,A
MOVX A,@R1
INC DPTR
INC R1
MUL AB
ADD A,R4
MOV R4,A
MOV A,B
ADDC A,R3
MOV R3,A
DJNZ R7,QAVFT1
MOV A,R4
JNB ACC7,QAVFT2
INC R3
QAVFT2 :MOV A,R3
RET
QAVTAB :DB
;一阶加权滞后滤波程序
;入口 :A,DELTY
;占用资源:B,R3,R4
;堆栈需求:2字节
;出口 :A
BQFILT :MOV B,A
CLR A
MOV DPTR,#ABTAB
MOVC A,A+DPTR
MUL AB
MOV R4,A
MOV R3,B
MOV A,01H
MOVC A,A+DPTR
MOV B,DELTY
MUL AB
ADD A,R4
MOV R4,A
MOV A,B
ADDC A,R3
MOV R3,A
MOV A,R4
JNB ACC7,FT1
INC R3
FT1 :MOV A,R3
MOV DELTY,A
RET
BQTAB :DB 80H,80H
计算机编程语言的发展,经历了从机器语言,汇编语言,高级语言课程。
机器语言
电子计算机。使用由“0”和“1”的二进制数,二进制的计算机语言。开始发明的计算机,只能放下你的谷租嗯计算机语言命令计算机做这做那,一句话,是写一个字符串为“0”和“1”组成的序列,指令由计算机来执行这种语言是机器语言。机器语言是很痛苦的,尤其是在程序中需要的错误,特别是。在计算机程序中的每一台计算机指挥系统经常变化,以运行在另一台计算机上,必须有另一种编程,从而导致工作重复。然而,由于使用的语言为特定的计算机模型,因此计算效率是最高的,所有的语言。机器语言,这是一个第一代的计算机语言。
汇编语言
为了减轻使用机器语言编程的痛苦,这是一个有用的改进二进制字符串:简洁的字母,符号的字符串,而不是一个特定的指令,如“ADD”代表加法器的“mov”表示数据传输,等等,因此,它很容易阅读和理解方案做,误差校正和维护变得容易,这种编程语言被称为汇编语言中,第二代的计算机语言。但是,计算机是不知道这些符号的,这就需要一个专门的程序,专门负责这些符号被翻译成机器语言的二进制数,这个翻译程序称为汇编。
汇编语言是同样依赖于机器的硬件,便携性不是很好,但效率还是非常高的,特定于计算机的硬件和汇编语言编程,准确地发挥计算机硬件的功能和专业知识准备完善的程序和高品质,它仍然是一种流行和强大的软件开发工具。
3。高级语言
从最初的交流与电脑的惨痛经历,人们认识到,你应该设计一种语言,这种语言接近于数学语言或自然语言,而不依赖于计算机硬件,通用的编译程序对所有机。于1954年,经过艰苦的努力,第一个完全脱离机器硬件的高级语言-FO RT RAN问世40多年来,数百个高层次的语言,几十个重要的影响比大,比较常见的使用FO RT RAN,ALGOL,COBOL,BASIC,LISP,SNOBOL,PL / 1,P ascal,C,PROLOG,A DA,C + +,VC,VB,D elphi,J AVA等。
高级语言的发展也经历了从早期的语言结构化编程语言,面向过程的编程语言的过程中,非程序。因此,软件的发展,由最初的个体手工作坊式发展的工业化,工业生产流水线封闭式生产。
6晚了,越来越多,规模越来越大的软件,软件的生产基本上是从战争中,缺乏科学规范的系统规划与测试,评估标准,其后果是大量的花巨资建立的软件系统,不能使用,因为它包含的错误,甚至是一个巨大的损失,给人的印象是,软件是越来越不可靠,所以很少或没有的软件错误。极大地震撼了计算机行业,被称为“软件危机”。意识:大型程序的准备,而不是写一个小程序,它应该是一个新的技术应该是一样的污水处理厂处理软件开发的全过程。方案设计应易于保证正确性,也便于验证正确性。 1969年,提出了结构化程序设计方法,在1970年,第一个结构化的编程语言-P ascal语言,标志着结构化程序设计开始的时期。
8月初开始,在软件设计的思想,产生了革命,其结果是一个面向对象的编程。几乎所有的面向过程的高级语言的程序在执行前,是一个的管道像一个模块执行完成前,人们不能做任何事情,不能动态地改变方向的实施方案。这是不符合的一天到一天的事情,人们希望发生的一件事,一件事,那就是,而不是面向过程的,而应该是面向应用程序的功能,是对象(object)。方法集成软件,作为硬件的一些通用的IC,生产,密切的功能模块的包称为软件歧管,它具有与特定的应用程序无关,但可以结合对方,以执行特定应用程序的功能,而反复使用。用户只关心接口(输入和输出),并能实现,如何实现,这是一个内部问题,用户完全不关心,
C + +,VB,D elphi是一个典型的代表。
下一个高层次的语言发展目标的应用程序,换句话说,只需要告诉你想要做的程序,该程序可以自动生成算法,自动处理,这是程序的编程语言。 (VC + +是一个高层次的面向对象的语言,VISUAL C + +是不是一种语言,只是开发工具,C和C + +是他的语言)
汇编程序:把汇编语言书写的程序翻译成与之等价的机器语言程序的翻译程序。
编译程序:把用高级程序设计语言书写的源程序,翻译成等价的计算机汇编语言或机器语言的目标程序的翻译程序。
解释程序:对源程序边解释翻译成机器代码边执行的高级语言程序。
高级语言的程序的执行的途径:
1)源程序(高级语言)->编译程序->目标程序(汇编语言)->汇编程序->目标程序(机器语言)->计算结果
2)源程序(高级语言)->编译程序->目标程序(机器语言)->计算结果
3)源程序(高级语言)->解释程序(逐条读出源程序中的语句并解释执行,即在解释程序的执行过程中并不产生目标程序)->计算结果
以上就是关于汇编程序的运行方法全部的内容,包括:汇编程序的运行方法、新手求教汇编语言程序,超级简单,但是我就是不会写,头疼死了、汇编语言发展史及过程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)