將數組的數字複製並將負數改變成正數(彙編)

將數組的數字複製並將負數改變成正數(彙編)

題目描述

將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的結果,發生了變化
在這裏插入圖片描述至此,就完成啦!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章