![解释地址传送指令“LES DX,BUF[BX][DI]"的功能及指令的 *** 作过程《新一代汇编语言程序设计》,第1张 解释地址传送指令“LES DX,BUF[BX][DI]"的功能及指令的 *** 作过程《新一代汇编语言程序设计》,第1张](/aiimages/%E8%A7%A3%E9%87%8A%E5%9C%B0%E5%9D%80%E4%BC%A0%E9%80%81%E6%8C%87%E4%BB%A4%E2%80%9CLES+DX%2CBUF%5BBX%5D%5BDI%5D%26quot%3B%E7%9A%84%E5%8A%9F%E8%83%BD%E5%8F%8A%E6%8C%87%E4%BB%A4%E7%9A%84%E6%93%8D%E4%BD%9C%E8%BF%87%E7%A8%8B%E3%80%8A%E6%96%B0%E4%B8%80%E4%BB%A3%E6%B1%87%E7%BC%96%E8%AF%AD%E8%A8%80%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E3%80%8B.png)
利用DOS系统功能调用(INT 21H中断的4C功能)返回DOS *
*********************************************************
程序框架结构(必不可少的语句)如下:
data segment
........
data ends
stack segment para stack
........
stack ends
coseg segment
assume cs:coseg,ds:data,ss:stack
start:
mov ax,data
mov ds,ax
........
mov ah,4ch
int 21h
(或者用INT 20H代替以上两行)
coseg ends
end start
-------------------------------------------------------
举例
LEA,LDS,LES指令的练习
题目:在DEBUG下单步运行下列程序的可执行程序,观察每步寄存器的内
容是否与实际相符。程序如下:
data1 segment
table1 db 30h,31h,32h,33h,34h,35h,36h,37h
db 38h,39h,41h,42h,43h,44h,45h,46h
num1 db 61h,62h,63h,64h,65h,66h,67h,68h
data1 ends
data2 segment
table2 db 30h,31h,32h,33h,34h,35h,36h,37h
db 38h,39h,41h,42h,43h,44h,45h,46h
num2 db 68h,67h,66h,65h,64h,63h,62h,61h
data2 ends
stack1 segment para stack
dw 20h dup(0)
stack1 ends
coseg segment
assume cs:coseg,ds:data1,es:data2,ss:stack1
start:
mov ax,data1 1
mov ds,ax 2
mov ax,data2 3
mov es,ax 4
mov bx,offset num1 5==8
mov sp,[bx] 6
xor bx,bx 7
lea bx,num1 8==9
lea sp,[bx] 9
xor bx,bx 10
lea bx,num1
lds si,[bx]
lea bx,num2
les di,es:[bx]
mov ah,4ch
int 21h
coseg ends
end start
*********************************************************
方法二:简化段定义结构 *
程序应在MASM 5.0,最好在MASM 6.0版下运行。 *
利用DOS系统功能调用(INT 21H中断的4C功能)返回DOS *
*********************************************************
程序框架结构(必不可少的语句)如下:
TITLE text
NAME module_name
.MODEL SMALL
.DATA [NAME]
........
.STACK [SIZE]
.CODE [NAME]
start:
mov ax,@data
mov ds,ax
........
mov ax,4c00h
int 21h
(或者用.EXIT [Return_value]代替以上两行)
(或者用INT 20H代替以上两行)
END START
举例
题目:求两个数的和,结果存储到指定内存单元。
要求:在DEBUG下单步运行下列程序的可执行程序,观察每步寄存器的内
容和存放结果的内存单元。程序如下:
TITLE ADDER
.MODEL SMALL
.DATA
OPR1 DW 12
OPR2 DW 24
RESULT DW ?
.CODE
START:
MOV AX,@DATA
MOV DS,AX
MOV AX,OPR1
ADD AX,OPR2
MOV RESULT,AX
.EXIT
END START
;************************************************************
方法三:程序段前缀结构: *
①将应用程序定义成一个过程,其属性为FAR。 *
②在程序开始处保存PSP段地址和零偏移地址,即保护现场。*
③在程序结束处使用RET指令返回DOS 。 *
*************************************************************
;程序框架结构(必不可少的语句)如下:
STACK SEGMENT PARA STACK 'STACK'
.......
STACK ENDS
DATA SEGMENT PARA 'DATA'
........
DATA ENDS
CODE SEGMENT PARA 'CODE'
ASSUME CS:CODE,DS:DATA,SS:STACK
MAIN PROC FAR
START: PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
........
RET
MAIN ENDP
CODE ENDS
END START
;-------------------------------------------------------
举例
;MOVSB指令的练习
题目:在数据段中有一个字符串,将其复制到数据段的另一缓冲
区中。程序如下:
STACK SEGMENT PARA STACK 'STACK'
DB 1024 DUP(?)
STACK ENDS
DATA SEGMENT PARA 'DATA'
HELLO DB 'Hello,world!',0dh,0ah,'$'
OK DB 16 DUP(?)
DATA ENDS
CODE SEGMENT PARA 'CODE'
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
MAIN PROC FAR
START: PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV SI,OFFSET HELLO
MOV DI,OFFSET OK
MOV CX,OK-HELLO
REP MOVSB
REP MOVS ES:BYTE PTR[DI],DS:[SI]
LEA DX,HELLO
MOV AH,9
INT 21H
RET
MAIN ENDP
CODE ENDS
END START
;***********************************************************************
方法四:COM文件格式。要求如下: *
①COM文件不允许分段,程序大小不允许超过64KB。 *
②程序运行的起始点必须是100H,其前256个字节为程序段前缀所在地。*
③不必设置堆栈段,程序装入后自动把SP建立在该段之末。 *
④对于所有过程则应定义为NEAR属性。 *
************************************************************************
;程序框架结构如下:
CODE SEGMENT
ORG 100H
ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE
MAIN PROC NEAR
START: ........
(程序代码部分)
........
MOV AX,4C00H
INT 21H
(或者用INT 20H代替以上两行)
........
(数据定义部分)
........
MAIN ENDP
CODE ENDS
END START
---------------------------------------------------
;对于MASM 5.0或MASM 6.0版也可采用如下程序框架结构:
标题部分
.model tiny
.code
org 100H
START: jmp begin
........
(数据定义部分)
........
begin:
........
(程序代码部分)
........
MOV AX,4C00H
INT 21H
(或者用INT 20H代替以上两行)
END START
;-------------------------------------------------------
举例
;分支程序设计练习
题目:将BX寄存器的内容以二进制格式显示在屏幕上,程序如下:
code segment
ORG 100H
ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE
MAIN PROC NEAR
begin: mov bx,1234h
mov cx,16
loop1: mov dl,'0'
rcl bx,1
jnc disp
mov dl,'1'
disp: mov ah,2
int 21h
loop loop1
mov ah,4ch
int 21h
MAIN ENDP
CODE ENDS
END begin
A. 计算机专业的核心课程是什么有几门课程
计算抄机考研专业课即袭可代表计算机专业的核心课程,有以下4门:
数据结构、计算机组成原理、 *** 作系统、计算机网络
另外计算机专业要求编程能力,所以编程基础不可忽视,比如python、java等编程语言等。
(1)计算机科学与技术专业核心课程扩展阅读:
计算机专业研究生考试初试科目有:
英语:100分, 数学:150分, 政治:100分 ;专业课:150分。
计算机考研初试专业课代码为408(计算机学科专业基础综合),试卷满分150分,考试时间180分钟;试卷内容结构:数据结构45分,计算机组成原理45分, *** 作系统35分,计算机网络25分;
计算机专业考研复习资料:
数据结构:《数据结构C语言版》《数据结构精讲和习题讲解》严蔚敏;
计算机组成原理:《计算机组成原理(第2版)》《计算机组成原理-学习指导与习题解答》
*** 作系统:《计算机 *** 作系统(第四版)》
《计算机 *** 作系统(第四版)学习指导与题解》 汤小丹
计算机网络《计算机网络(第7版)》《计算机网络释疑与习题解答》 谢希仁
B. 计算机科学与技术的课程都有哪些
你好,计算机科学与技术专业都要学习:高等数学、大学英语、专业英语、概率统计、离散数学、电路、模拟电子、数字电子、数据结构、 *** 作系统、编译原理、计算机网络、数据库原理、软件工程、汇编语言、C++程序设计、接口技术、Java、VC++、计算机病毒分析、网络攻击与防护、密码学应用或网络游戏理论、游戏设计、三维动画等
C. 计算机科学与技术本科专业有哪些核心课程应该如何安排学习顺序
计算机专业我有哟,需要找找
D. 计算机科学与技术专业课程有哪些
1、数字逻辑电路
数字逻辑是计算机专业本科生的一门主要课程,具有自身的理论体系和很强的实践性。它是计算机组成原理的主要先导课程之一,是计算机应用专业关于计算机系纤胜吉构方面的主干课程之一。
2、计算机组成原理
《计算机组成原理》系统地介绍了计算机的基本组成原理和内部工作机制。《计算机组成原理》共分8章。
主要内容分成两个部分:第1、2章介绍了计算机的基础知识;第3~8章介绍了计算机的各子系统(包括运算器、存储器、控制器、外部设备和输入输出子系统等)的基本组成原理、设计方法、相互关系以及各子系统互相连接构成整机系统的技术。
3、计算机系统结构
计算机系统结构是计算机的机器语言程序员或编译程序编写者所看到的外特性。所谓外特性,就是计算机的概念性结构和功能特性,主要研究计算机系统的基本工作原理,以及在硬件、软件界面划分的权衡策略,建立完整的、系统的计算机软硬件整体概念。
4、数据库概论
数据库已是计算机系本科生不可缺少的专业基础课,它是计算机应用的重要支柱之一。该课程讲授数据库技术的特点,数据库系统的结构,三种典型数据模型及系统(以关系型系统为主)、数据库规范化理论,数据库的设计与管理,以及数据库技术的新进展等。
5、 *** 作系统
*** 作系统(英语:operating system,缩写作OS)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。
*** 作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、 *** 作网络与管理文件系统等基本事务。 *** 作系统也提供一个让用户与系统交互的 *** 作界面。
E. 计算机科学与技术本科专业,有哪些核心课程
C/C++程序设计语言
数据结构
计算机组成原理
计算机编译原理
数据库
计算机网络与安全
软件工程
大学四年所学课程都是非常全面的,没有专业方向。真正有专业方向还是研究生阶段。
计算机专业分成四个方向,计算机系统结构、计算机软件与理论、计算机应用技术 还有就是计算机软件工程硕士了你可以选择一个自己感兴趣的方向!
考研的考试科目分为公共课和专业课。公共课包括英语和政治,而专业课包括数学(数学分为四个等级,计算机专业一般院校指定考数学一)、专业课一、专业课二。
专业课一和专业课二,对于各个不同的学校而言,他们的这两个科目可能会有所不同。具体为哪两个科目,请查阅各个院校的对应系的招生简章。如果还没有选定某所学校,那么在以下的科目是经常作为专业课一和专业课二来考核的:数据结构(包括至少一门编程语言,C或PASCAL), *** 作系统,离散数学,编译原理,组成原理。这几门课的先后顺序即为被大多数学校选作考试科目的选考频率。对于特定的一所学校而言,其考试科目一般不会经常变化的,即其专业课一和专业课二的考试科目一般是比较固定的,当然,也不排除个别学校在个别年份发生变化,这一点请一定要注意查看各校简章。
好好学习。
F. 大学本科计算机科学与技术专业需要主修哪些课程
1、数字逻辑电路
数字逻辑是计算机专业本科生的一门主要课程,具有自身的理论体系和很强的实践性。它是计算机组成原理的主要先导课程之一,是计算机应用专业关于计算机系纤胜吉构方面的主干课程之一。课程的主要目的是便学生了解和掌握从对数字系统提出要求开始,一直到用集成电路实现所需逻辑功能为止的整个过程的完整知识。
内容有数制和编码、布尔代数和逻辑函数、组台逻辑电路的分析和设计,时序逻辑电路的分析和设计,中、大规模集成电路的应用。通过对该课程的学习,可以为计算机组成原理、微型计算机技术、计算机系纤胜吉构等课程打下坚实的基础。
(6)计算机科学与技术专业核心课程扩展阅读:
计算机科学与技术专业的就业前景
智能化使计算机具有模拟人的感觉和思维过程的能力,使计算机成为智能计算机。这也是目前正在研制的新一代计算机要实现的目标。智能化的研究包括模式识别、图像识别、自然语言的生成和理解、博弈、定理自动证明、自动程序设计、专家系统、学习系统和智能机器人等,已研制出多种具有人的部分智能的机器人。
网络化是计算机发展的又一个重要趋势。从单机走向联网是计算机应用发展的必然结果。所谓计算机网络化,是指用现代通信技术和计算机技术把分布在不同地点的计算机互联起来,组成一个规模大、功能强、可以互相通信的网络结构。
多媒体计算机是当前计算机领域中最引人注目的高新技术之一。多媒体计算机就是利用计算机技术、通信技术和大众传播技术,来综合处理多种媒体信息的计算机。这些信息包括文本、视频图像、图形、声音、文字等。多媒体技术使多种信息建立了有机联系,并集成为一个具有人机交互性的系统。多媒体计算机将真正改善人机界面,使计算机朝着人类接受和处理信息的最自然的方式发展。
G. 计算机科学与技术专业要学哪些课程
我是学这个专业的,以下是我大学四年要学的课程
计算机科学与技术专业2007级教学计内划规定课程容
公共基础课:
大学物理
大学物理实验
军事理论
*** 思想、 *** 理论和“ *** ”重要思想概论
形势与政策
中国近现代史刚要
思想道德修养与法律基础
大学英语1-4
计算机技术基础
体育与健康
高等数学
电路分析基础
概率与数理统计
离散数学
线性代数
专业课:
C语言程序设计及课程设计
汇编语言程序设计即课程设计
数据结构
算法分析
数字逻辑
线性电子线路
电子商务
合同法
计算机组成原理
*** 作系统
计算机图形学
数字电路与VHDL设计
港站与枢纽
数据库应用及实践
面向.NET的WEB应用课程设计
CAD技术
国际贸易实务
。。。。大概就是这些了
不同学校安排的课程可能不一样,不过大致还是类同的
本程序通过编译,运行正确Code Segment
Assume CS:Code,DS:Code
CR equ 000DH
LF equ 000AH
KBBack equ 0008H
Name_Len equ 18 用户名最大长度
Pass_Len equ 8 密码最大长度
-------------------------------------
将用户名和密码定义为一个结构类型
User Struc 成绩单结构类型
User_Name db Name_Len dup(?) 用户名
Name_Lenth db ? 用户名实际长度
Pass_Word db Name_Len dup(?) 密码
Pass_Lenth db ? 密码实际长度
User EndS
-------------------------------------
功能:显示指定地址(Str_Addr)的字符串
入口:
Str_Addr=字符串地址(要求在数据段)
用法: Output Str_Addr
用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
-------------------------------------
功能:取光标位置
入口:无
出口:DH=行号,DL=列号
GetCursor Proc Near
PUSH AX
PUSH BX
PUSH CX
PUSH DX
XOR BX,BX
MOV AH,3
INT 10H
MOV Cursor_Row,DH
MOV Cursor_Col,DL
POP DX
POP CX
POP BX
POP AX
RET
Cursor_Row DB ?
Cursor_Col DB ?
GetCursor EndP
-------------------------------------
功能:置光标位置
入口:Cursor_Row=行坐标Cursor_Col: 列坐标)
SetCursor Proc Near
PUSH DX
PUSH CX
PUSH BX
PUSH AX
MOV DH,Cursor_Row
MOV DL,Cursor_Col
XOR BX,BX
MOV AH,2
INT 10H
POP AX
POP BX
POP CX
POP DX
RET
SetCursor EndP
-------------------------------------
窗口上滚指定行数
Roll_Up Proc Near
xor bh,bh 显示页号
mov ah,8 读光标位置的字符和属性
int 10h
mov bh,ah 上滚窗口空行属性
mov cx,100h 左上角坐标
mov al,5
mov dx,54fh 右下角坐标
mov ah,6
int 10h
ret
Roll_Up EndP
-------------------------------------
功能:输入指定位数的用户密码,实际输入的密码字符以“*”显示,并有回空纠错功能
入口:di=密码输入缓冲区地址
出口:AL=实际输入的密码字符数
Input_PassW Proc Near
push di
mov cx,Pass_Len 密码最大长度
@@Input: call GetCursor 取光标位置
mov ah,7 从键盘接受一个字符
int 21h
cmp al,CR 回车符?
jz @@Calc_Chrs 是,结束密码输入,转去计算实际输入的密码字符数
cmp al,KBBack
jz @@KB_Back 若是回空键,重新输入
stosb 保存输入的字符
mov dl,'*'
mov ah,2
int 21h
jmp @@KBBack
@@KB_Back: dec Cursor_Col
inc cx
dec di
@@KBBack: inc Cursor_Col
call SetCursor 置光标位置
loop @@Input 接受下一个数字
@@Calc_Chrs:mov cx,di
pop di
sub cx,di
cmp cl,[si.Pass_Lenth]
jnz @@Pass_Err 密码长度不等
mov cl,[si.Pass_Lenth]
xor ch,ch
push si
lea si,[si.Pass_Word]
cld
repz cmpsb 比较密码是否正确
pop si
jcxz $+4
@@Pass_Err: clc 进位标志复位,表示密码不正确
ret
stc 进位标志置位,表示密码正确
ret
Input_PassW EndP
-------------------------------------
Again_Input Proc Near
Output Input_Again 提示:是否重新输入用户名
mov ah,1 从键盘接受一个字符
int 21h
or al,20h 转换成小写,大小写不敏感
cmp al,'y' 重新输入?
jnz $+7 不
call Roll_Up 窗口上滚指定行数
stc 进位标志置位,表示重复前面的 *** 作
ret
cmp al,'n' 不重新输入?
jnz Again_Input 不是,非有效字母,重新输入
clc 进位标志复位,表示放弃前面的 *** 作
ret
Again_Input EndP
-------------------------------------
Users equ 5 用户数
Even
User_Inform User <'richcon',7,'12345678',8>
User <'WangMing',8,'21345678',8>
User <'ZhangHongQiao',13,'13245678',8>
User <'LiYan',5,'12435678',8>
User <'XuPengYu',12,'12354678',8>
Prompt_User db 'User name: $'
Prompt_Word db 'Pass word: $'
Empty_Error db 7,CR,LF,CR,LF,'User name is empty.$'
Register_No db 7,CR,LF,CR,LF,'No register.$'
Pass_Error db 7,CR,LF,CR,LF,'Pass word error!$'
Welcome db 7,CR,LF,CR,LF,'WELCOME$',0
Input_Again db CR,LF,CR,LF,'Do you input user name again(y/n)?$'
Start: push cs
pop ds 使数据段与代码段同段
push cs
pop es 使附加段与代码段同段
Output Prompt_User 提示输入用户名
call GetCursor 取光标位置
Input_Name: call SetCursor 置光标位置
lea dx,Buffer 数据缓冲区地址
mov ah,0ah 键盘缓冲区输入
int 21h
lea si,Buffer[1] 实际输入的字符数地址
lodsb 取实际输入的字符数
test al,al 空串?
jnz Valid_Test 不是,检测输入的用户是否注册
Output Empty_Error 提示用户名为空
jmp Input_Name 重新输入用户名
Valid_Test: mov cx,Users 注册用户数
lea si,User_Inform 注册用户信息地址
Valid_Test0:cmp al,[si.Name_Lenth] 输入的用户名长度=用户名实际长度?
jnz Next_One 不相等,与下一个注册用户名比较
push cx
push si
lea si,[si.User_Name]
lea di,Buffer[2] 实际输入的用户名地址
mov cl,al
xor ch,ch
cld
repz cmpsb 比较用户名是否已注册
stc 进位标志置位,表示用户名已注册
jcxz $+3
clc 进位标志复位,表示用户名未注册
pop si
pop cx
jc Input_Pass 用户名已注册,转去输入用户密码
Next_One: add si,type User 下一个注册用户信息地址
loop Valid_Test0
Output Register_No 提示:非注册用户
call Again_Input 是否继续
jc Input_Name 进位标志置位,转去重新输入用户名
jmp Exit_Proc 不重新输入用户名,结束程序
Input_Pass: mov word ptr Cursor_Row,1
call SetCursor 置光标位置
Output Prompt_Word 提示输入密码
lea di,Buffer 密码缓冲区地址
call Input_PassW 输入密码
jc @@Welcome 密码输入正确,显示欢迎信息
Output Pass_Error 提示密码输入错误
call Again_Input 是否继续
jc Input_Pass 进位标志置位,转去重新输入密码
jmp Exit_Proc 不重新输入密码,结束程序
@@Welcome: Output Welcome 显示欢迎信息
Exit_Proc: mov ah,4ch 结束程序
int 21h
Buffer db 20 数据缓冲区
Code ENDS
END Start 编译到此结束
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)