用汇编语言编程:有一个100字节的元素的数组,其首要地址为ARRAY,将每个元素减1(不考虑溢出)后存于原处

作者&投稿:卜莉 (若有异议请与网页底部的电邮联系)
在8086系统内存中,有一首地址为BUF有符号字节数组,共有10个元素,编写完整的汇编语言源程序实现以下功能~

DATA SEGMENT BUF DB 3,5,-3,0,2,-8,1,-4,-9,-18 N EQU $-BUF COUNT DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,SEG DATA MOV DS,AX LEA SI,BUF MOV BYTE PTR COUNT,0 MOV CX,N CALL PROC_COUNT MOV BYTE PTR COUNT,AL MOV AH,4CH INT 21H PROC_COUNT PROC NEAR PUSH BX MOV BL,0 CLD @1: LODSB CMP AL,0 JLE @2 INC BL @2: LOOP @1 MOV AL,BL POP BX RET PROC_COUNT ENDP CODE ENDS END START

以前回答过:http://blog.163.com/asm_c/blog/static/2482031132015581028111用子程序实现,就要麻烦一些,如下:DATA SEGMENT ARRAY1 DW 0, -1, 2, 3, 4, -5, 6, -7, 8 , 9, -10 COUNT EQU $ - ARRAY1 ARRAY2 DW 20 DUP(?) ;求绝对值后存入的新数组 LEN DW ? ;新数组长度 MSG1 DB 13, 10, 'Before Sort : $' MSG2 DB 13, 10, 'After Sort : $'DATA ENDSCODE SEGMENT ASSUME CS: CODE, DS: DATASTART: MOV AX, DATA MOV DS, AX MOV AH, 09H LEA DX, MSG1 INT 21H ;显示提示字符串MSG1 LEA SI, ARRAY1 CALL OUTPUT ;调用输出数组子程序OUTPUT,显示原始数据 CALL Absolute ;调用求绝对值子程序Absolute,求绝对值 CALL SORT ;调用排序子程序SORT对数组排序 MOV AH, 09H LEA DX, MSG2 INT 21H ;显示提示字符串MSG2 LEA SI, ARRAY2 CALL OUTPUT ;调用输出数组子程序OUTPUT,显示求绝对值后的数据 EXIT: MOV AH, 4CH INT 21H ;主程序返回DOS ;----------------------------------------------- ;子程序名:SORT;功能: SORT PROC NEAR ;此处请增添代码 MOV CX, COUNT SHR CX, 1 DEC CXS0: PUSH CX MOV DI, SIS1: MOV AX, [DI] CMP AX, [DI + 2] JA S3 XCHG AX, [DI + 2] XCHG AX, [DI]S3: ADD DI, 2 LOOP S1 POP CX LOOP S0 RETSORT ENDP;------------------------------------------------ ;子程序名:Absolute;功能:求绝对值 Absolute PROC NEAR ;此处请增添代码 LEA SI, ARRAY1 LEA DI, ARRAY2 MOV CX, COUNT SHR CX, 1ABS: MOV AX, [SI] CMP AX, 0 JGE ABS2 NEG AXABS2: MOV [DI], AX ADD SI, 2 ADD DI, 2 LOOP ABS RETAbsolute ENDP ;------------------------------------------------ ;子程序名:OUTPUT ;功能:输出数组OUTPUT PROC NEAR ;此处请增添代码 MOV AH, 2 MOV DL, 13 INT 21H MOV DL, 10 INT 21H MOV CX, COUNT SHR CX, 1ZH3: MOV AX, [SI] CMP AX, 0 JGE ZH0 NEG AX MOV [SI], AX MOV AH, 2 MOV DL, '-' INT 21HZH0:MOV AX, [SI] MOV BX, 10 PUSH CX MOV CX, 0ZH1:MOV DX, 0 DIV BX ADD DL, '0' PUSH DX INC CX CMP AX, 0 JNZ ZH1 MOV AH, 2ZH2:POP DX INT 21H LOOP ZH2 POP CX MOV DL, ' ' INT 21H ADD SI, 2 LOOP ZH3 RETOUTPUT ENDP;-------------------------------------------------CODE ENDS END START

用循环处理。
找一个寄存器(比如SI)指向array,将SI所指向的单元减一,接着SI加一指向下一个字节单元。执行100次即可。
程序如下(在masm5.0和Microsoft (R) Overlay Linker Version 3.60环境下调试通过,利用debug看到正确结果):
dseg segment
array db 10 dup(1,2,3,4,5,6,7,8,9,10);这里定义的数据是随意写的,结果应该是0,1,2,3……
cnt equ $-array;这里直接写上100也可以
dseg ends
cseg segment
assume cs:cseg,ds:dseg
begin: mov ax,dseg
mov ds,ax
mov si,offset array
mov cx,cnt
next: dec byte ptr [si]
inc si
loop next
mov ax,4c00h
int 21h
cseg ends
end begin


什么是汇编语言和汇编程序?怎样才能将汇编程序转变为单片机可执行文件...
1. 编写汇编程序:使用汇编语言编写程序源代码,这些源代码包含了各种操作指令和必要的数据定义。2. 汇编过程:利用汇编器(Assembler)将汇编源代码转换为目标文件。目标文件通常包含机器码,这些机器码是单片机可以直接执行的指令。汇编器在这个过程中还会生成一些其他的辅助信息,如符号表等。3. 链接过程(...

汇编语言是一种什么程序设计语言
汇编语言是一种工具程序设计语言,用于将汇编语言源程序转换为机器语言。在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。普遍地说,特定的汇编语言和...

编程语言有几种,分别都是编什么程序的?
汇编程序通常由三部分组成:指令、伪指令和宏指令。汇编程序的每一句指令只能对应实际操作过程中的一个很细微的动作,例如移动、自增,因此汇编源程序一般比较冗长、复杂、容易出错,而且使用汇编语言编程需要有更多的计算机专业知识,但汇编语言的优点也是显而易见的,用汇编语言所能完成的操作不是一般高级语言所能实现的,而...

电子计算机需要用到的汇编语言是一种什么样的指令?
汇编语言用一种助记符来代替二进制的指令,它比机器语言直观,而且容易记忆。但是计算机不能直接识别和执行,需要通过一个“翻译”(即汇编)将汇编语言编写的程序转换为机器语言,计算机才能执行。汇编语言的指令语句与机器指令是一一对应的,也是因机而异的,用它编写的程序仍不能通用,仍然较繁琐。因此...

程序语言分为哪三类
有的汇编语言编程工具经常会提供宏,它们也被称为宏汇编器。通常被应用在底层,硬件操作和高要求的程序优化的场合,驱动程序、嵌入式操作系统和实时运行程序都需要汇编语言。三、高级语言:高级语言(High-level programming language)相对于机器语言(machine language,是一种指令集的体系。这种指令集,称...

汇编语言程序求答案
最近老师布置一道题,用汇编语言编程统计30个学生成绩,要求:1.键盘输入;2.计算出最高分,最低分并显示;3.统计60分一下,60-69,70-79,80-89,90-100各个分数段人数,并显示;4.计... 最近老师布置一道题,用汇编语言编程统计30个学生成绩,要求:1.键盘输入;2.计算出最高分,最低分并显示;3.统计60分一下,...

求专业翻译
设计流程(尤其是RTL 编码,合成 )熟悉音像压缩的理论和算法了解MPEG-1\/2 标准,熟悉其音像相关部分 熟悉音像解码器的一般体系结构和流程了解AV 图像同步录音的基本理论和算法 熟悉Perl\/TCL 语言 熟悉 H264 标准的影像部分者优先考虑 能够使用集成编程语言者优先考虑 较好的口语表达和英语写作能力 ...

想知道编程语言有哪些?
编程语言主要包括汇编语言、机器语言以及高级语言。汇编语言:该语言主要是以缩写英文作为标符进行编写的,运用汇编语言进行编写的一般都是较为简练的小程序,其在执行方面较为便利,但汇编语言在程序方面较为冗长,所以具有较高的出错率。机器语言:这种语言主要是利用二进制编码进行指令的发送,能够被计算机...

51单片机 用汇编语言怎么编程:几个有符号数的比较大小
设内部RAM中的30H和31H单元中有两个带符号数,求其中的大数,放在32H单元中。;MOV 32H,30H ;先取一个放好.MOV A,30H CLR C SUBB A,31H ;(30H)-(31H)JNB ACC.7,ZZZ ;差为正数则转移.JB OV,_END ;负、且溢出转至结尾.SJMP XXX ;否则去存31H ZZZ:JNB OV,_END ;差为正、且无...

汇编语言是什么扩展名
汇编语言源文件是保存为扩展名为.asm的文件,需要经过编译器编译成.exe 或者.com文件,才能在命令行中运行。.ASM扩展名:汇编语言源文件,Pro\/E装配文件。汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符(...

临潼区14712184830: 用汇编语言编程:有一个100字节的元素的数组,其首要地址为ARRAY,将每个元素减1(不考虑溢出)后存于原处 -
虞瑶聚明: 用循环处理. 找一个寄存器(比如SI)指向array,将SI所指向的单元减一,接着SI加一指向下一个字节单元.执行100次即可. 程序如下(在masm5.0和Microsoft (R) Overlay Linker Version 3.60环境下调试通过,利用debug看到正确结果):...

临潼区14712184830: 【汇编语言】编写以buffer为起始地址的100个字节清零,求程序! -
虞瑶聚明: mov ax,0 mov bx,offset buffer mov cx,50 LP:mov [bx], ax add bx, 2 loop LP end

临潼区14712184830: 汇编语言中,定义有100个字节单元数组,初始值为空,怎么写啊? -
虞瑶聚明: 初始值为空我不知道什么意思,我只知道怎么弄成0 下面是一百个字节的数组,初值全为0 data segment db 100 dup (0) data ends

临潼区14712184830: 用汇编编写一程序,把从buffer开始的100个字节的内存区域初始化为55H、0AAH、55H、0AAH、……55H、0AAH
虞瑶聚明: assume cs:code, ds:datas datas segment buf db 100 dup(?) datas ends code segment start: mov ax, datas mov ds, ax mov es, ax mov cx, 50 mov ax, 0aa55h rep stosw mov ax, 4c00h int 21h code ends end start

临潼区14712184830: 用汇编语言编写1000H地址开始的100个字节数据项,向递增方向移动一个字节位置 -
虞瑶聚明: ;MOV R6, #0MOV R7, #0MOV R2, #100MOV DPTR, #1000H LOOP:MOVX A, @DPTRADD A, R6MOV R6, ACLR AADDC A, R7MOV R7, A INC DPTRDJNZ R2, LOOPNOP SJMP $ END ------------------------- 可以参考:

临潼区14712184830: 用汇编语言 ,将片外RAM的1000H单元开始的100字节的数据相加,结果存于R7R6中 -
虞瑶聚明: 100个单字节数之和两个字节足够存放了,该题可以用一个循环来实现.先将R7R6清零,之后逐步取出数据与低八位R6相加,进位与R7相加就可以了;代码如下:SUM: MOV DPTR,#1000H ;数据指针送DPTRMOV R2,#100 ;数据个数送R2 ...

临潼区14712184830: 汇编:编写一段程序,将100个字节的缓冲区BUFF清0 -
虞瑶聚明: 给你个代码片段,直接套用即可si <== BUFF地址lea si,BUFFxor al,almov cx,100Empty: mov BYTE ptr [si],al inc siloop Empty

临潼区14712184830: 汇编语言程序设计步骤 有那几步 -
虞瑶聚明:[答案] 汇编语言程序设计步骤:1、 分析问题,抽象出描述问题的数据模型 2、 确定问题的算法思想 3、 画出流程图或结构图 4、 分配存储器和工作单元(寄存器) 5、 逐条编写程序 6、 静态检查,上机调试 例:编程查找考生的最高分,假设所有考生分...

临潼区14712184830: 汇编 编写程序 某一数据共有100个字,编程序找出最大的数,并传送到MAX内存单元中. -
虞瑶聚明: 老师要求是:输出学号和姓名, 输入数并以空格间隔 能判断错误的输入 能够循环判断编程思路:先输出学号和姓名输出"Input datas(0 - 9999):"然后输入数字,以空格间隔错误判断比较数的大小转换为十进制按回车,输出最大...

临潼区14712184830: 用汇编语言编写一个程序 -
虞瑶聚明: 1计算U =(X +(Y * Z-100))/ W 其中:X,Y,Z,W是16的符号数. 程序如下:数据段X DW 10; 16 可变功能?DW 20 于DW 30W DW 40> U DW?? 数据结束 代码段 假设CS:CODE,DS:DATA 开始: MOV AX,DATAMOV DS,AXMOV AX,YIMUL ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网