将数组的数字复制并将负数改变成正数(汇编)
程序员文章站
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的结果,发生了变化
至此,就完成啦!
上一篇: 某部门的一个电话面试
下一篇: 汇编实验(四) 统计学生成绩程序