欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

将数组的数字复制并将负数改变成正数(汇编)

程序员文章站 2022-04-12 23:31:38
...

将数组的数字复制并将负数改变成正数(汇编)

题目描述

将10个数(有正数,有负数)全部转换成正数

一些汇编指令

指令 含义
lea bx,x lea取x有效的地址给bx
mov bx,offset x 将x的地址给bx,相当于lea bx,x,和第一条指令等价
or al,al al 与 al
jns 判断不是不是负数
jnz 判断不是0

程序代码

	data segment
	x db -1,2,-3,4,-5,6,-7,8,-9,10  ;db 相当于一个数组类型
	org 10h   
	y db 100 dup('$') ;申请100个空间,每个空间赋值 $
data ends

code segment
	assume cs:code,ds:data  ;声明代码段和数据段
	
start:
	
	mov ax,data  
	mov ds,ax
	
	mov cx,10   ;cx相当于一个计数器
	lea bx,x	;lea取有效的地址   相当于把x的地址给bx bx指向了x数组的首地址 
	lea si,y	

next1: 
	mov al,[bx] ;将x[bx]的值赋值给al  mov指令不影响标志位
	or al,al ; 将al | al 给标志位赋值   eg: 1000 | 1000 最高位 1 | 1 = 1 也就相当于给FLAGS(控制寄存器)中的 SF(符号标志位)置数 
	jns next ; jns 判断不是负数 就执行next 
	neg al ; neg 给al取绝对值
next:
	mov [si],al  ;将al的值赋值给y[si]
	
	inc bx ;bx++
	inc si ;si++
	dec cx ;cx--
	jnz next1 ;jnz 如果cx不是0就执行next1 jnz的默认操作数是cx
	
	
	mov ax,4c00h ;返回dos
	int 21h

code ends
	end start ;程序结束

程序执行结果

我们debug调试一下,查看数据段的值使我们的初值
将数组的数字复制并将负数改变成正数(汇编)我们让程序执行完
将数组的数字复制并将负数改变成正数(汇编)查看ds的结果,发生了变化
将数组的数字复制并将负数改变成正数(汇编)至此,就完成啦!

相关标签: 汇编