汇编语言程序设计
汇编语言程序设计步骤: 1、 分析问题,抽象出描述问题的数据模型 2、 确定问题的算法思想 3、 画出流程图或结构图 4、 分配存储器和工作单元(寄存器) 5、 逐条编写程序 6、 静态检查,上机调试 例:编程查找考生的最高分,假设所有考生分数已存入计算机内存。 1、 分析问题 根据条件、特点、规律 →数学模型 本例分数已给定为0~200之间的整数集合(考虑加试分) ,记为{S},找max{S}(注: 简单问题不一定写数学模型) 。 2、 确定算法思想 最好利用现成算法和程序设计方法,若无,则需根据实践经验总结算法思想。如本例, 从成绩单第一分数往下看,边看边比较,记住较高分,舍弃较低分,直至看完,最高分存于 脑中。归纳算法思想:建立数据指针并指向数据区首地址。将第一数取入寄存器(如AL) , 与下一数比较,若下一数大则将其取入寄存器,否则调整指针,再与下一数比较,重复上述 过程,直至比较完毕,寄存器中即最高分。 读分数用MOV指令,比较用CMP指令,分析判断用条件转移指令。 3、 画流程图或结构图 有逻辑流程、算法流程、程序流程等,复杂问题需画模块结构。本例简单,只画出程序 流程图(用模块化结构的N-S流程图表示) : 本例的N-S流程图 图中初始化包括:设一个计数器,将分数个数减一后送计数器,每比较一次减一,至 零查找结束;建立一个指针指向数据区。 开始 初始化 取第一数到寄存器 与下一数比较 下一数大? 是 否 取大数到寄存器 修改指针,计数次数减一 返回到循环体开始,直到计数次数为0退出循环 结束 4、 分配存储器空间和工作单元(寄存器) 定义数据段、堆栈段、代码段等。工作单元一般用寄存器。本例:分数放数据段,建100 字节堆栈空间,BX作数据指针,CX作计数器,AL放最高分。 5、 逐条编写程序 DATA SEGMENT FEN DB 85,90,60,75,87,35,80,78,96,82…… ;存分数 MAX DB ? ;存最高分 DATA ENDS STACK SEGMENT PARA STACK ‘STACK’ DB 100 DUP(?) ;100字节堆栈 STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START PROC FAR PUSH DS MOV AX,0 PUSH AX ;为了返回DOS MOV AX,DATA MOV DS,AX ;置数据段寄存器 MOV BX,OFFSET FEN ;置数据指针 MOV CX,MAX-FEN ;置计数器初值 DEC CX ;N个分数比较N-1次 MOV AL,[BX] ;取第一个分数 LOP: INC BX ;调整指针 CMP AL,[BX] ;与下一数比较 JAE NEXT ;大于等于则转 MOV AL,[BX] ;否则取下一数 NEXT: LOOP LOP ;计数器减一, ;不为零转LOP MOV MAX,AL ;存放最高分 RET ;返回DOS START ENDP CODE ENDS END START 6、 静态检查,上机调试 选用指令尽量字节少,使其执行速度快。易错处应重点查,如比较次数、转移条件等。 确信无错后方可上机调试。
mov bx,2
mov ax,1
begin:
add ax,bx
cmp ax,8000
jnl end
inc bx
jmp begin
end:
;bx中的数即是
在某一字符串中搜寻是否有字符A,若有,则把搜索次数记录下来,送到BX中;若无,则将BX清0。设字符串起始地址偏移量为00H,字符串长度为n。
MOV DI,0000H //字符串初始地址放入寄存器DI中
MOV CX,n //字符串长度放入CX中
MOV AL,'A' //要查找的字母A放入AL中
CLD//清除方向标志位
REPNE SCASB//以上都是指令REPNE SCASB的指令要求。。。可以参考该指令用法,作用是不相等则重复比较
JZ FOUND //有条件跳转转移 CX为零则执行标号FOUND处的指令
MOV DI,00H//赋值DI为00H
FOUND: MOV BX,DI//DI值赋给BX
HLT//停止 关键是REPNE SCASB指令
2.条件转移指令
AX中存放的无符号数,若为偶数,则直接除以2;若为奇数,则加1再除以2。
TEST AX, 0001H //AX中的数与0001H做逻辑与运算 但不影响AX的值
JZ EVEN //如果结果为0则AX中为偶数跳转到EVEN
ADD AX,1 //AX中的数加1
EVEN: SHR AX,1 //AX中的数右移一位 相当于除以2
3. 循环指令
若在存储器的数据段中有100个字节构成的数组,要求从该数组中找出“$”字符,然后将“$”字符前面的所有元素相加,结果保留在AL寄存器中。
MOV CX,100 //将100赋值给计数寄存器CX
MOV SI,00FFH //初始地址00FFH赋值给SI
L1:INC SI //将SI中的值加1
CMP BYTE PTR[SI],’$’ //当前地址的一字节数据与$做比较
LOOPNE L1 //不相等继续执行L1
SUB SI,0100H //SI中的数据减去100
MOV CX,SI //SI 赋值给CX
MOV SI,0100H
MOV AL,[SI] //以SI中的数据做地址寻址找到数据赋值给AL
DEC CX //CX 减去1
L2: INC SI //将SI中的数加1
ADD AL,[SI] 用SI相对寻址得到的数据与AL中的数据相加
LOOP L2 循环执行L2一直到CX为0
HLT
最后这个我不是很明白
我认为该这样写
MOV CX,100
MOV SI,00FFH
L1:INC SI
CMP BYTE PTR[SI],’$’
LOOPNE L1
SUB SI,00FFH //更改了这。。。00FF应该是起始地址 为什么原程序减去的是100呢。。不理解
MOV CX,SI //当前SI值应该是$所在的地址 减去00FFH就成了$之前的字节数 然后赋值给CX
MOV SI,00FFH
MOV AL,[SI]
DEC CX
L2: INC SI
ADD AL,[SI]
LOOP L2
HLT
一、
MOV DI,0000H ;让ds:di指向字符串
MOV CX,n ;设置循环次数
MOV AL,'A' ;设置扫描的字母
CLD ;设置df为0
REPNE SCASB ;开始扫描
JZ FOUND ;找到则跳转
MOV DI,00H ;没找到则让di指向字符串开头
FOUND: MOV BX,DI ;让bx记录A所在位置
HLT ;处理器暂停
二、
TEST AX, 0001H ;判断最后一位是否为一
JZ EVEN ;为一,是奇数,跳转
ADD AX,1 ;是偶数,加一
EVEN: SHR AX,1 ;右移一位,相当于除2
三、
MOV CX,100 ;设置循环次数
MOV SI,00FFH ;di指向字符串的前一个字节
L1:INC SI
CMP BYTE PTR[SI],’$’
LOOPNE L1 ;di指向下一个字节,如果它不是$而且循环次数未到,则转到L1继续循环;
SUB SI,0100H
MOV CX,SI
MOV SI,0100H ;指向第一个字符
MOV AL,[SI] ;把第一个字符送入al
DEC CX ;指向前一个字符
L2: INC SI ;指向下一个字符
ADD AL,[SI] ;把字符加到al
LOOP L2 ;如果次数没到则转L2继续
HLT ;处理器暂停
data segment
n db 5
result dw ?
data ends
code segment
assume ds:data,cs:code
start:
mov ax,data
mov ds,ax
mov cl,n
mov ch,0
mov al,1
next:
mul cl
loop next
mov result,ax
mov ax,4c00h
int 21h
code ends
end start
程序设计语言一般可分为三类
程序设计语言分成了三大类,分别是机器语言,汇编语言和高级语言。1,机器语言 机器语言,顾名思义就是机器认识的语言,即这类语言或者其构成的程序可以直接被机器所识别的语言。这类语言是无需翻译的,其优点是较为直接,但缺点也非常明显——难以被人类所理解和记忆。2,汇编语言 汇编语言是第二代...
汇编语言是一种什么程序设计语言
在编程语言被机器语言和汇编语言更新之后,人们发现了限制程序普及的关键因素——程序的可移植性。有必要设计一个可以独立于计算机硬件在不同机器上运行的程序。这样可以避免很多重复的编程过程,提高效率。同时,这种语言应该接近数学语言或人类自然语言。20世纪50年代,计算机还很匮乏的时候,第一个高级编程...
高级语言程序设计过程是什么
本教程操作环境:windows7系统、Dell G3电脑。高级语言程序设计过程是:问题分析,算法确定,代码设计。程序设计是给出解决特定问题程序的过程,是软件构造活动中的重要组成部分。程序设计往往以某种程序设计语言为工具,给出这种语言下的程序。程序设计过程应当包括分析、设计、编码、测试、排错等不同阶段。
程序设计语言包括
程序设计语言包括低级语言和高级语言。程序设计语言,按照语言级别可以分为两大类:低级语言和高级语言。低级语言包括机器语言和汇编语言。低级语言依赖于特定的机器,其使用复杂、繁琐、费时、易出差错,因而程序编写也有一定的难度。机器语言是表示成二进制形式的机器基本指令集,或者是操作码经过符号化的...
汇编语言是一种什么程序设计语言?
比起机器语言,汇编语言具有更高的机器相关性,更加便于记忆和书写,但又同时保留了机器语言高速度和高效率的特点。汇编语言仍是面向机器的语言,很难从其代码上理解程序设计意图,设计出来的程序不易被移植,故不像其他大多数的高级计算机语言一样被广泛应用。所以在高级语言高度发展的今天,它通常被用在...
程序设计语言在计算机系统中的地位和作用
程序设计语言在计算机系统中的地位和作用是核心和基础的。它们是人与计算机之间沟通的主要方式,负责将人类的思维转化为计算机可以执行的指令,从而实现各种功能和应用。首先,程序设计语言允许开发者将复杂的任务或问题分解为更容易管理的部分,然后通过特定的语法和规则将这些部分组合起来。例如,在开发一个...
什么是程序设计语言?
程序设计语言(programming language)是用于编写计算机程序的语言。语言的基础是一组记号和一组规则。根据规则由记号构成的记号串的总体就是语言。在程序设计语言中,这些记号串就是程序。程序设计语言包含三个方面,即语法、语义和语用。语法表示程序的结构或形式,亦即表示构成程序的各个记号之间的组合规则,...
计算机程序设计主要学什么
2.编程语言 掌握一种或多种编程语言是程序设计的核心要素。不同的编程语言有不同的特点和适用场景,学习如何正确地使用编程语言来实现算法和解决问题是非常重要的。3.软件工程 软件工程是指在计算机程序的开发过程中使用的一系列方法和技术。包括需求分析、系统设计、编码、测试、维护等各个阶段。学习软件...
高级程序设计语言有哪些
有很多。高级程序设计语言有:Fortran、Pascal、Cobol、C、C、Basic、Ada、Java、C#、Lisp、Haskell、ML、Scheme、Prolog、Smalltalk等等。高级程序设计语言的分类:命令式语言。这种语言的语义基础是模拟“数据存储\/数据操作”的图灵机可计算模型,十分符合现代计算机体系结构的自然实现方式。其中产生操作的主要...
程序设计语言的优缺点是什么?
2、缺点:是用指令编程,而成千上万条指令很难记住,且一旦出错很难找出错误。不同型号的计算机,指令编码并不相同,因此,针对某一型计算机写的程序移植到另外一种计算机上后,运行结果未必正确,甚至有可能根本不能运行。二、汇编语言 1、优点:可直接访问系统接口,汇编程序翻译成的机器语言程序的效率...
卜庆爱全:[答案] 汇编语言程序设计步骤:1、 分析问题,抽象出描述问题的数据模型 2、 确定问题的算法思想 3、 画出流程图或结构图 4、 分配存储器和工作单元(寄存器) 5、 逐条编写程序 6、 静态检查,上机调试 例:编程查找考生的最高分,假设所有考生分...
夏邑县18355041902: 简单介绍一下汇编语言程序设计 - ?
卜庆爱全: 汇编比较好的书有:王爽老师《汇编语言》,杨季文老师的《80X86汇编语言程序设计》.看汇编不看保护模式的程序设计的话,汇编也就白学了,所以保护模式非常重要.当然这也是汇编一些应用的基础,比如软件解密,驱动的编写.有了好...
夏邑县18355041902: 汇编语言程序设计 - ?
卜庆爱全: DEV C++下编译成功#include<stdio.h>#include<stdlib.h>#include<string.h> int zhuanhua(char num[]) { int j,i=0,sum=0; char *p,s[]="0123456789ABCDEF"; p=num; while(i<strlen(num)) { for(j=0;j<16;j++) { if(*p==s[j]) { sum=16*sum+j; p++; break; } }...
夏邑县18355041902: .汇编语言程序设计考题,一、判断题(5道小题,1、MASM汇编语言的注释用分号开始,无所谓英文分号、还是中文分号.(3分) 正确 错误 2、按照... - ?
卜庆爱全:[答案] 一、判断题(5道小题,共15分) 1、MASM汇编语言的注释用分号开始,无所谓英文分号、还是中文分号.(3分) 错误 2、按照MASM语法编程时,可以将SHL作为8086指令的标号.(3分) 错误 3、指令“mov ax,ds:[100h]”中,若DS...
夏邑县18355041902: 汇编语言程序设计与计算机原理的区别 - ?
卜庆爱全: 汇编语言程序设计这个课程重点讲述基于8086 8088CPU的汇编语言设计,偏重汇编软件的学习应用,由于汇编语言与硬件关系太密切,不得不带进计算机的硬件讲解,但重中之重还是软件; 计算机原理则是全方位的,硬件工作原理与软件工作原理兼顾,更全面些
夏邑县18355041902: 汇编语言程序设计 - ?
卜庆爱全: ; 本程序通过编译,运行正确Code Segment Assume CS:Code,DS:Coden equ 8Start: mov cx,n cmp cx,1 ;n>1? ja Next ;是,阶乘 mov ax,1 ;n<=1,n!=1 jmp Exit_ProcNext: ...
夏邑县18355041902: 汇编语言程序设计的一般步骤是什么? - ?
卜庆爱全: 汇编语言程序设计的基本步骤了解了汇编语言指令的功能和用法,了解了汇编语言程序的编写格式,就可以编制完整的汇编语言程序了.一个程序通常具有顺序、分支、循环和子程序4种结构形 式.顺序程序结构就是指完全按顺序逐条执行的...
夏邑县18355041902: 汇编语言程序设计题实现有符号数绝对值的加法运算设字节变量X和Y中存放的是16位有符号数,试编写程序实现|X|+|Y|结果送AL的计算 - ?
卜庆爱全:[答案] mov ax,x test ah,0xF0 //是否为负数 jnz nz: not ax nz: mov dx,ax mov ax,y test ah,0xF0 ;是否为负数 jnz nz: not ax nz: add ax,dx ;高16位在dx,低16位在ax 把结果送入al是不行的
夏邑县18355041902: 汇编语言程序设计1?
卜庆爱全: 汇编就是按ASCII读数的,直接排序,输出时好像是用int 9输出字符,汇编好多年没用了,自己找相关的书看看吧