題目描述
將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的結果,發生了變化
至此,就完成啦!