汇编语言程序代码详细版

合集下载

新版汇编语言程序设计变量定义及常用伪指令

新版汇编语言程序设计变量定义及常用伪指令

新版汇编语言程序设计变量定义及常用伪指令汇编语言是计算机底层的编程语言,具有高效、灵活的特点。

在进行汇编语言程序设计时,变量定义和常用伪指令是不可或缺的重要部分。

本文将详细介绍新版汇编语言程序设计中的变量定义和常用伪指令,并提供相应的示例和应用。

一、变量定义在汇编语言中,变量定义是用来存储数据的标识符和内存分配的过程。

变量可以是不同的数据类型,如整型、字符型、字符串型等。

变量定义的格式如下所示:变量名数据类型初始值其中,变量名是标识符,用来表示变量的名称;数据类型是变量的类型,包括BYTE、WORD、DWORD等;初始值是可选项,用来给变量赋初值。

下面是一个变量定义的示例:count DWORD 10这个例子定义了一个名为count的DWORD类型变量,初始值为10。

二、常用伪指令1. EQUEQU是汇编语言中常用的伪指令,用于给标识符赋值。

其格式如下:标识符 EQU 表达式其中,标识符是需要赋值的标识符,表达式是赋给标识符的值。

下面是一个EQU指令的示例:MAX_SIZE EQU 100这个例子给标识符MAX_SIZE赋值为100。

2. DB、DW、DDDB、DW和DD是用来定义字节、字和双字变量的伪指令。

它们分别代表Byte(字节)、Word(字)和Double Word(双字)。

其格式如下:标识符 DB/ DW/ DD 初始值下面是一个DB指令的示例:message DB "Hello, World!"这个例子定义了一个名为message的字节型变量,并给它赋值为"Hello, World!"。

3. RESB、RESW、RESDRESB、RESW和RESD是用来声明未初始化的字节、字和双字变量的伪指令。

其格式如下:标识符 RESB/ RESW/ RESD 数量其中,标识符是需要声明的变量名,数量是变量的个数。

下面是一个RESW指令的示例:numbers RESW 5这个例子声明了一个名为numbers的字型数组,包含5个元素。

汇编文件控制程序

汇编文件控制程序

汇编文件控制程序一、引言在计算机科学中,汇编语言是一种低级编程语言,它直接与特定的计算机硬件进行交互。

使用汇编语言编写的程序通常被编译成机器代码,这使得它们在运行时具有极高的效率。

然而,由于这种语言的复杂性,开发人员往往需要花费大量的时间和精力来编写和维护这些程序。

因此,开发一种能够自动化处理汇编文件的管理和控制程序,对于提高开发效率和代码质量具有重要意义。

二、汇编文件控制程序的功能汇编文件控制程序的主要功能包括:1、文件管理:程序可以自动创建、复制、移动和删除汇编文件,从而简化了开发人员对文件系统的操作。

2、编译控制:程序可以自动调用汇编编译器,将汇编源文件编译成机器代码,减少了因手动操作导致的错误。

3、版本控制:程序可以跟踪和管理汇编文件的版本信息,使得开发团队可以轻松地跟踪代码的变更历史。

4、调试支持:程序可以自动生成调试信息,使得开发人员可以更方便地调试和优化他们的程序。

5、性能分析:程序可以自动分析汇编代码的性能,帮助开发人员优化代码,提高程序的运行效率。

三、实现汇编文件控制程序的步骤实现一个汇编文件控制程序需要以下步骤:1、确定需求:首先需要明确程序需要实现的功能和目标。

2、设计程序架构:根据需求设计程序的模块和结构。

3、编写代码:根据设计文档编写程序的各个模块。

4、测试程序:对编写的代码进行测试,确保程序的正确性和稳定性。

5、优化和改进:根据测试结果对程序进行优化和改进。

6、发布和维护:发布程序,并定期进行维护和更新。

四、结论汇编文件控制程序是一个重要的工具,它可以帮助开发人员自动化处理汇编文件的管理和控制。

通过使用这种程序,开发人员可以节省大量的时间和精力,提高开发效率和代码质量。

在实现一个汇编文件控制程序时,需要明确需求、设计程序架构、编写代码、测试程序、优化和改进以及发布和维护等步骤。

通过不断地改进和完善,可以使得这种程序成为一个强大的工具,帮助开发人员更有效地进行软件开发。

汇编语言(王爽第三版)实验5编写、调试具体多个段的程序

汇编语言(王爽第三版)实验5编写、调试具体多个段的程序

汇编语⾔(王爽第三版)实验5编写、调试具体多个段的程序实验5 编写、调试具体多个段的程序⼀。

将下⾯的程序编译连接,⽤Debug加载、跟踪,然后回答问题。

assume cs:code,ds:data,ss:stackdata segmentdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hdata endsstack segmentdw 0,0,0,0,0,0,0,0stack endscode segmentstart: mov ax,stackmov ss,axmov sp,16mov ax,datamov ds,axpush ds:[0]push ds:[2]pop ds:[2]pop ds:[0]mov ax,4c00hint 21hcode endsend start程序分析:由于是初次接触,我们逐步讲解,废话多点。

(1)此程序考察的是内存中数据段和栈段的定义。

程序共定义了1个数据段,data段,⾸先明确,在程序运⾏开始(标号start处),这个数据段就已经被定义好了,并且分配了内存空间,并赋值了。

⼀个栈段,stack。

同理这个数据段在没有被⼈⼯定义为栈结构时,也被定义好了。

并且分配了内存空间,并赋值了。

将此程序编译并连接后,使⽤debug调试,(这⾥需要注意,以下的段地址可能由于系统不同⽽有差异,主要是理解概念。

)E:\assembly>debug eee.exe-rAX=0000 BX=0000 CX=0042 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=0B55 ES=0B55 SS=0B65 CS=0B67 IP=0000 NV UP EI PL NZ NA PO NC0B67:0000 B8660B MOV AX,0B66程序分析:我们什么也没执⾏,此时我们在data段定义的数据在哪?在ds:0100H处(原来讲过,程序最开始时ds:00~ds:100H是留给程序与操作系统通讯使⽤的psp内存段,参见书中p92);也就是说我们在ds:100H、0B55:100H或0B65:00处可以看见这些定义的数据。

汇编指令大全

汇编指令大全

汇编指令大全1. 引言汇编语言是一种基于计算机硬件体系结构的低级语言。

它用于编写与硬件交互的程序,并且具有直接访问计算机底层硬件的能力。

汇编指令是汇编语言中的基本操作指令,用于执行各种计算机操作,如数据传输、算术运算和逻辑运算等。

本文将为您介绍一些常见的汇编指令。

2. 数据传输指令数据传输指令用于在寄存器之间或内存和寄存器之间传输数据。

2.1 MOV - 数据传送指令mov是最常见的数据传送指令之一。

它用于将数据从一个源操作数传送到一个目的操作数。

mov destination, source其中,destination是目的操作数,source是源操作数。

这两个操作数可以是寄存器、内存地址或立即数。

2.2 LEA - 加载有效地址指令lea指令用于加载一个有效地址到一个目的操作数。

lea destination, source其中,destination是目的操作数,通常为一个寄存器,source是一个内存地址。

3. 算术运算指令算术运算指令用于执行加法、减法、乘法和除法等算术运算。

3.1 ADD - 加法指令add指令用于将两个操作数相加,并将结果存储在目的操作数中。

add destination, source其中,destination是目的操作数,source是源操作数。

这两个操作数可以是寄存器或内存地址。

3.2 SUB - 减法指令sub指令用于将第二个操作数从第一个操作数中减去,并将结果存储在目的操作数中。

sub destination, source其中,destination是目的操作数,source是源操作数。

这两个操作数可以是寄存器或内存地址。

3.3 MUL - 乘法指令mul指令用于将两个操作数相乘,并将结果存储在目的操作数中。

其中,destination是目的操作数,source是源操作数。

这两个操作数可以是寄存器或内存地址。

3.4 DIV - 除法指令div指令用于将目的操作数除以源操作数,并将商存储在目的操作数中,余数存储在另一个寄存器中。

微机原理课程设计(汇编语言)——将键盘输入的小写字母转换成大写..

微机原理课程设计(汇编语言)——将键盘输入的小写字母转换成大写..

设计6、将键盘输入的小写字母转换成大写字母的设计1.实验要求:为了解小写字母和大写字母在计算机内的表示方法,并学习如何进行转换。

编写程序,接收键盘字符,并将其中的小写字母转变为大写字母,然后显示在屏幕上。

2.参考流程:3.程序清单:DA TA SEGMENTDA TA1 DB 20 DUP(?)DISPP1 DB 'please input letters, end with enter, exit with ctrl-c',0DH,0AH,'$'DISPP2 DB 'the inverted litter is:', 0DH, 0AH,'$'DISPP3 DB 0DH,0AH,'$'DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART: MOV AX,DA TAMOV DS,AXMOV SI,00HMOV BX,OFFSET DA TA1LEA DX,DISPP1MOV AH,9INT 21HL1: MOV AH,1INT 21HCMP AL,03HJZ L4CMP AL,0DHJZ L3CMP AL,61HJZ L2SUB AL,20HJMP L2L2: MOV [BX+SI],ALINC SIJMP L1L3: LEA DX,DISPP3MOV AH,9INT 21HLEA DX,DISPP2MOV AH,9INT 21HMOV [BX+SI],ALMOV AL,0AHMOV [BX+SI+1],ALMOV AL,'$'MOV [BX+SI+2],ALMOV DX,BXMOV AH,9INT 21HLEA DX,DISPP3MOV AH,9INT 21HJMP L4L4: MOV AH,4CHINT 21HCODE ENDSEND START4.运行结果显示:文- 汉语汉字编辑词条文,wen,从玄从爻。

汇编程序格式标准

汇编程序格式标准

Freescale 汇编语言源程序标准时间:2006-05-12 15:57:00 来源: 作者:刘玉宏Freescale 汇编语言源程序标准------------------------------------------------------此标准包括:行的长度限制可接受的字符和字符格式源程序列的分配注释格式-------------------------------------------------------行的长度:为了便于阅读和打印,Freescale使用mono-spaced字体,这种字体每个字符宽度相等.字体大小是9 point;最大行长为70个字符.示例如下:; 1 2 3 4 5 6 7;234567890123456789012345678901234567890123456789012345678901234567890 asc2hex: bsr ishex ;check for valid hex # firstbne dunA2asc ;if not just returncmp #’9’ ;check for A-F ($41-$46)bls notA2F ;skip if not A-F列表输出文件示例如下:; 1 2 3 4 5 6 7 8 9;23456789012345678901234567890123456789012345678901234567890123456789012 345678901234567890123551 C1D7 AD EA asc2hex: bsr ishex ;check for valid hex # first552 C1D9 26 0A bne dunA2asc ;if not just return553 C1DB A1 39 cmp #’9’ ;check for A-F ($41-$46)554 C1DD 23 02 bls notA2F ;skip if not A-F从以上可以看出列宽最大到93字符,因为列表输出文件并不能给读者提供更多的有用信息,因此Freescale最大用到每行93字符.-----------------------------------------------------------避免使用TAB字符TAB字符在不同的字处理软件中有不同的含义,当把源文件提交给其它文档时可能会出现问题,所以要避免使用TAB,而用多个空格代替.-----------------------------------------------------------源程序列分配源程序由标号,助记符,操作数和注释组成一行;标号在第1列开始指令助记符在第13列开始操作数在19列开始注释在31列开始;如果操作数超过了30列,注释必须和操作数的最后一个字符分开1到2个空格.如果一个标号超过11个字符,就应该另起一行,并在31列做注释.短标号也可以另起一行来突出它,这经常用在一个子程序开始处.见图3; 1 2 3 4 5 6 7;234567890123456789012345678901234567890123456789012345678901234567890 label: mne operand ;commentbrset very,long,operand ;comment can’t start in col 31veryLongLabel: ;long label on separate linenop ;instruction with no operandsshort: ;short label may use a separate linemne operand ;code to which ‘short’ refers-----------------------------------------------------------大写和小写字符源程序中协调一致的大小写可以增强可读性,并使程序变得容易理解.标号标号可以混和使用大小写,但无论在哪儿引用它都应该严格匹配其初始定义.指令助记符指令助记符,汇编指示和预处理应当使用小写字符.尽管他们可以使用大写字符,但是输入时要敲shift键,而且大写字符使读者变得不能专心阅读.各种各样得文档中指令使用大写字符仅仅是为了突出他们.有经验得程序员使用小写字符不但容易输入而且容易阅读.寄存器和位Freescale的头文件中使用大写字符定义寄存器和位.位的定义有两种方法位号(0-7)和位屏蔽码.位操作指令使用位号;逻辑操作指令使用屏蔽码方式.屏蔽码在位号前面加一个小写字母m前缀.示例见图4PTAD: equ $00 ;I/O port A data register; bit numbers for use in BCLR, BSET, BRCLR, and BRSETPTAD7: equ 7 ;bit #7PTAD6: equ 6 ;bit #6PTAD5: equ 5 ;bit #5PTAD4: equ 4 ;bit #4PTAD3: equ 3 ;bit #3PTAD2: equ 2 ;bit #2PTAD1: equ 1 ;bit #1PTAD0: equ 0 ;bit #0; bit position masksmPTAD7: equ %10000000 ;port A bit 7mPTAD6: equ %01000000 ;port A bit 6mPTAD5: equ %00100000 ;port A bit 5mPTAD4: equ %00010000 ;port A bit 4mPTAD3: equ %00001000 ;port A bit 3mPTAD2: equ %00000100 ;port A bit 2mPTAD1: equ %00000010 ;port A bit 1mPTAD0: equ %00000001 ;port A bit 0-----------------------------------------------------------标号标号可以混和使用大小写,但避免使用下划线,我们推荐使用大写字符做为多字符标号的分界.例如:VeryLongLabel代替ery_long_label标号定义并加一个冒号,尽管有很多编译器不需要这个冒号.文件和子程序头文件和子程序前面需要一个块来说明他的用途和目的,称为头图5是典型的文件头;*********************************************************************************** *********;* Title: 9S08GB60_v1r2.equ (c) FREESCALE Inc. 2003 All rights reserved. ;*********************************************************************************** *********;* Author: Jim Sibigtroth - Freescale TSPG;*;* Description: Register and bit name definitions for 9S08GB60;*;* Documentation: 9S08GB60 family Data Sheet for register and bit explanations;* HCS08 Family Reference Manual (HCS08RM1/D) appendix B for explanation of equat e files;*;* Include Files: none;*;* Assembler: Metrowerks Code Warrior 3.0 (pre-release);* or P&E Microcomputer Systems - CASMS08 (beta v4.02);*;* Revision History:;* Rev # Date Who Comments;* ----- ----------- ------ --------------------------------------------;* 1.2 24-Apr-03 J-Sib correct minor typos in comments;* 1.1 21-Apr-03 J-Sib comments and modify for CW 3.0 project;* 1.0 15-Apr-03 J-Sib Release version for 9S09GB60;*********************************************************************************** *********其中有些是必须的,有些可以省略文件名:必须,包括文件名和后缀版权声明:必须作者:必须,有些文件可能重复使用数年,有时需要帮助时可以联系他们描述:必须,但仅是摘要,更多信息应该在一个单独的文件中文档:另外一个文件,她是对这个文件的详细说明包含文件:需要时必须汇编器:汇编器的厂商和版本,非常重要版本历史:提供何时,何人,哪个文件被修改等信息图6是子程序头模板,可以根据子程序的复杂程度适当增减;****************************************************************** ;* RoutineName - expanded name or phrase describing purpose;* Brief description, typically a few lines explaining the;* purpose of the program.;*;* I/O: Explain what is expected and what is produced;*;* Calling Convention: How is the routine called?;*;* Stack Usage: (when needed) When a routine has several variables;* on the stack, this section describes the structure of the;* information.;*;* Information about routines that are called and any registers;* that get destroyed. In general, if some registers are pushed at;* the beginning and pulled at the end, it is not necessary to;* describe this in the routine header.;******************************************************************;****************************************************************** ;* GetSRec - retrieve one S-record via SCI1;* Terminal program should delay after to allow programming;* recommended delay after is TBDms, no delay after chars.;* Only header (S0), data (S1), and end (S9) records accepted;*;* Calling Convention:;* ais #-bufferLength ;# of data bytes + 4 (typ.36);* jsr GetSRec ;read S-record onto stack;* bne error ;Z=0 means record bad;*;;*; ’bufferLength’ is defined in calling program not in this;*; subroutine, calling routine must also deallocate buffer space;*; after processing the information that was returned on the stack;*;;* ais #bufferLength ;deallocate buffer space;*;* Returns: all but CCR Z-bit returned on stack (see stack map);* CCR Z-bit = 1 if valid S-record; CCR Z-bit = 0 if not valid;* S-record type @ sp+1 (1 ASCII byte) ($30, $31, or $39);* S-record size @ sp+2 (1 hex byte) (# of data bytes 0-31);* S-record addr @ sp+3 (2 hex bytes) (addr of 1st data value);* S-record data @ sp+5..sp+36 (up to 32 hex data bytes);*;* Stack map... S-record, return, and locals on stack;* | | <-sp (after local space allocated);* H:X-> | SRecCount |;* | SRecChkSum | <-sp (after jsr);* | ReturnAddr msb |;* | ReturnAddr lsb | <-sp (after rts);* | SRecTyp |;* | SRecSize |;* H:X-> | SRecAddr msb |;* | SRecAddr lsb |;* | SRecData 00 |;* | SRecData 01 | etc... (up to 32 bytes);*;* Data values are read as two ASCII characters, converted to;* hex digits, combined into 1 hex value, and stored on stack;*;* Calls: GetChar, PutChar, and GetHexByte;* Changes: A, H, and X;****************************************************************** 图7是一个复杂的头,它使用堆栈传递参数并且附加的堆栈来分配局部变量.虽然可以描述很多的细节但我们规定头的描述最好限制在3到4行.如果要求更多的细节,可以使用一个的单独的文件,而不是描述在代码文件中.调用协议是想当复杂的,因为用户必须分配传递参数的堆栈空间,堆栈内的参数包括用户填充的和本子程序返回的.当这个子程序放回后,一条BNE指令用来检查Z标志来检查本子程序是否成功得到一个S记录.当检查到一个错误或可处理的返回数据,调用程序必须处理调用前分配的传递参数的堆栈空间.堆栈的用法也非常复杂,因为本子程序在堆栈上处理信息,所以给读者提供一个堆栈信息映像来帮助读者理解这个子程序是非常重要的.这个映像展示了一个最大的块,这个块是在调用子程序之前分配的.返回地址做为JSR指令的结果也存储在堆栈上.本子程序内部分配使用的2字节局部变量必须在返回调用程序之前处理完毕.在这个子程序的头的最后调用项:列出本子程序需要调用的子程序.改变项:列出执行本子程序改变的寄存器;******************************************************************;* GetChar - wait indefinitely for a character to be received;* through SCI1 (until RDRF becomes set) then read char into A;* and return. Reading character clears RDRF. No error checking.;*;* Calling convention:;* jsr GetChar;*;* Returns: received character in A;******************************************************************图8展示一个简单的子程序头,这个头不包含堆栈信息,也不调用其它子程序,所以这些信息都不需要了.----------------------------------------------------------------注释:注释是非常重要的,大多数注释格式是以分号并从31列开始直到行尾.避免注释重复说明指令内容.例如:lda pta ;读A口数据.取而代之注释应传递这样一些信息:为什么指令在这儿,指令如何描述程序功能或系统包含的嵌入式微控制器.这是一个好的注释:lda PTAD ;check for low on bit 7 (step switch)如果注释过长不能在一行完成,那么应该在第1列单独起一行,但不宜频繁使用以防淹没代码行.如果是多行注释可以写成注释块,注释块与代码行以空注释行相分隔如下所示:;; In-line comment block. On rare occasions, an extended comment; is needed to explain some important aspect of a program. Each; line of the extended comment starts with a semicolon. A line; with nothing but a semicolon in column 1 is used above and; below the block comment to set it apart from code.;注释格式基础理论注释或空行可以使程序组成逻辑段以提高可读性.子程序头块可以标识一个子程序的开始.类似的分隔也是非常有用的.。

汇编源程序名词解释

汇编源程序名词解释

汇编源程序名词解释
汇编源程序,也被称为汇编语言程序或汇编语言源程序,是指用汇编语言编写的程序。

汇编语言是一种低级的编程语言,其指令集与计算机的机器语言指令集一一对应。

因此,汇编源程序是人类可读的文本文件,包含了按照特定语法规则编写的指令。

然而,汇编源程序在机器上不能直接执行。

它必须经过一个称为“汇编”的过程,即翻译过程,才能变成计算机可以执行的机器语言程序。

汇编程序的核心功能是将汇编指令逐条翻译成机器指令,这正是汇编语言中“汇编”一词的含义。

汇编源程序的文件扩展名通常为.asm,经过汇编以后生成的浮动地址二进制文件扩展名为.obj。

这个.obj文件还需要经过连接才能生成可执行文件.exe。

总的来说,汇编源程序是计算机程序开发过程中的一个重要环节,它介于高级语言源程序和机器语言之间,既具有一定的可读性,又能直接对应到计算机硬件指令,因此在某些特定的应用场合(如系统编程、嵌入式系统开发等)有着广泛的应用。

visual studio 汇编 语法检查

visual studio 汇编 语法检查

visual studio 汇编语法检查Visual Studio 是一种集成开发环境(IDE),支持多种编程语言,包括汇编语言。

在Visual Studio 中编写汇编代码时,可以通过一些内置的功能进行语法检查,以提高代码的质量和可维护性。

以下是关于Visual Studio 汇编语法检查的详细解释:Visual Studio 汇编语法检查的方法:1. 智能感知和自动完成Visual Studio 提供了智能感知和自动完成功能,能够在您键入代码的同时提供相关的建议和提示。

这包括寄存器、指令、标签等。

这样可以避免一些常见的语法错误,提高编写汇编代码的效率。

2. 语法高亮Visual Studio 在编辑器中通过语法高亮显示不同的汇编元素,如指令、寄存器、标签等。

语法高亮可以帮助您更清晰地看到代码结构,减少可能的语法错误。

3. 错误和警告提示Visual Studio 在编译汇编代码时会检测并显示可能的错误和警告。

错误和警告消息将显示在“错误列表”窗口中,以帮助您定位和修复代码中的问题。

通过双击错误列表中的错误,可以直接跳转到代码中出现错误的位置。

4. 集成调试器Visual Studio 提供了强大的集成调试器,可以用于调试汇编代码。

调试器不仅能够帮助您找出代码中的逻辑错误,还可以检查寄存器、内存和变量的值,帮助您理解程序执行过程中的状态。

通过调试器,您可以逐步执行代码并观察其行为,从而更容易发现语法错误。

5. 插件和扩展Visual Studio 支持许多插件和扩展,其中一些可能提供额外的语法检查功能。

这些插件和扩展可能会包括静态代码分析、代码规范检查等功能,有助于提高代码质量。

6. 编译器选项Visual Studio 具有丰富的编译器选项,您可以在项目设置中进行配置。

通过调整这些选项,您可以控制编译器的行为,包括严格的语法检查、警告级别、生成调试信息等。

7. 代码分析工具Visual Studio 中集成了一些代码分析工具,可以帮助您发现潜在的问题、改进代码质量。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.1
DATAS SEGMENT
x db 6
y db 7
z db ?
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
dw 100 dup(0);此处输入堆栈段代码STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS START:
push ds
mov ax,0
push ax
mov ax,datas
mov ds,ax
mov dl,x
add dl,y
mov cl,3
sal dl,cl
sub dl,x
sar dl,1
mov z , dl
;此处输入代码段代码
MOV AH,4CH
INT 21H
CODES ENDS
END START
1.2DATAS SEGMENT
x db 4 dup (0)
y db 4 dup (0)
z db 4 dup (0)
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
dw 100 dup(0);此处输入堆栈段代码STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS START:
mov x,12h
mov [x+1],34h
mov [x+2],56h
mov [x+3],78h
mov bl,78h
mov y,34h
mov [y+1],56h
mov [y+2],87h
mov [y+3],64h
add bl,64h
mov [z+3],bl
mov bl,56h
adc bl,87h
mov [z+2],bl
mov bl,34h
adc bl,56h
mov [z+1],bl
mov bl,12h
adc bl,34h
mov z,bl
;此处输入代码段代码
MOV AH,4CH
INT 21H
CODES ENDS
END START
3
DATAS SEGMENT
array db -3,-2,5,-1,4
x equ $-array
result db ?
DATAS ENDS
STACKS SEGMENT
dw 30h dup(0)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS START:
MOV AX,DATAS
MOV DS,AX
mov ax,offset result
mov bx,offset array
sub ax,bx
mov cx,ax
mov ax,0
mov dx,0
mov SI,0
mov bx,x
lop1:cmp bl,array[SI]
jg lop2
inc dl
lop2:inc SI
dec cx
cmp ax,cx
jne lop1
mov result,dl
MOV AH,4CH
INT 21H
CODES ENDS
END START
4
4.1
DATAS SEGMENT
index db 10 dup(0)
len equ $-index
DATAS ENDS
STACKS SEGMENT
dw 100 dup(0);此处输入堆栈段代码STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS START:
MOV AX,DATAS
MOV DS,AX
mov cx,8
mov index[0],0
mov index[1],1
mov di,1
lop:
inc di
mov dl,index[di-1]
add dl,index[di-2]
mov index[di],dl
loop lop
jmp lop3
lop3:MOV AH,4CH
INT 21H
CODES ENDS
END START
4.2
DATAS SEGMENT
str db '1257a89bc4k'
count db 0
DATAS ENDS
STACKS SEGMENT
dw 100 dup(0);此处输入堆栈段代码STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS START:
MOV AX,DATAS
MOV DS,AX
mov cx,12
mov di,-1
lop:
dec cx
cmp cx,0
jz lop3
inc di
mov dl,str[di]
cmp dl,'0'
jb lop2
cmp dl,'9'
ja lop2
jmp lop
jmp lop3
lop2:
inc count
jmp lop
lop3:
MOV AH,4CH
INT 21H
CODES ENDS
END START
5
DATAS SEGMENT
charbuf DB 31H ;开辟的缓冲区DB 0
DB 31H DUP(0)
count1 db 0
count2 db 0
count3 db 0
DATAS ENDS
STACKS SEGMENT
dw 100 dup(0)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS START:
MOV AX,DATAS
MOV DS,AX
MOV DX,SEG charbuf
MOV DS,DX
MOV DX , OFFSET charbuf
MOV AH,0AH
INT 21H
mov si,1
mov ch,charbuf[si]
inc si
get_key:
mov al,charbuf[si]
cmp al,'0'
jnb shuzi
jmp lop3
shuzi:
cmp al,'9'
jbe lop1
cmp al,'A'
jnb zifu1
jmp lop3
zifu1:cmp al,'Z'
jbe lop2
cmp al,'a'
jnb zifu2
jmp lop3
zifu2:
cmp al,'z'
jbe lop2
jmp lop3
lop1:inc count1 inc si
dec ch
cmp ch,0
jnz get_key
jmp lop4
lop2:
inc count2
inc si
dec ch
cmp ch,0
jnz get_key
jmp lop4
lop3:
inc count3
inc si
dec ch
cmp ch,0
jnz get_key
jmp lop4
lop4:
add count1,30h mov dl,count1 mov ah,02h
int 21h
add count2,30h mov dl,count2 mov ah,02h
int 21h
mov al,count3
add al,30h mov dl,al mov ah,02h int 21h lop5: MOV AH,4CH INT 21H CODES ENDS END START。

相关文档
最新文档