1樓:匿名使用者
用補碼進行判斷。
比如:-1 0xff
-2 0xfe
等等。對於8位機而言,1~127為正數;0為0,129~255為負數(-127~-1),還有一個-128
一共127+1+127+1=256個數。
前提是你確定是有符號數;
如果是無符號數,那麼就是從0到255。
2樓:王愛飛
首先,你要確定這個數是用什麼型別的資料(這裡指有符號數還是無符號數),有符號數才有正負之分,然後你就可以通過與0比較而得出結論;無符號數都是正數
3樓:匿名使用者
是補碼數嗎?容易,只要看最高位是0還是1就行。比如這個數現在存在al裡,那麼可以這樣:
shl al, 1;把最高位移進cf符號位jc (負數處理區標號);如果溢位位是1,說明最高位是1,是負數,否則是正數
(正數處理語句區)
即使待判斷的數是一個長達1g位元組的大數,你也只需要把最高位的那一個位元組移到al裡,然後執行上面的兩行程式就可作出判斷。
4樓:匿名使用者
對於組合語言,這個數到底正數還是負數,是由程式設計師來決定的。
彙編中,通常算術運算,都按正數對待。如果出現負數,將影響進位位。
我們去看別人的程式,通常很難下定義。
高階語言則用補碼形式表現負整數,浮點數表示負實數。或自行定義的資料型別、結構
組合語言統計陣列中的正數、負數和零的個數
5樓:百度文庫精選
內容來自使用者:流淚的觀音
data segment
s1 db 13,10,'zheng:$'
s3 db 13,10,'fu:$'
s2 db 13,10,'0:$'
num db -1,3,5,0,-5,-7,4,0,8v1 db 0
v2 db 0
v3 db 0
data ends
stack1 segment para stack
db 20h dup(0)stack1 ends
code segment
assume cs:code,ds:data,ss:stackstart:
mov ax,data
mov ds,ax
mov es,ax
mov di,offset numxor bl,bl
mov cx,9
l1: mov al,[di]or al,al
je addv2
jg addv1
inc v3
jmp bottom
addv2: inc v2
jmp bottom
addv1: inc v1
bottom: inc di
loop l1
mov ah,09h
mov dx,offset
int 21h
mov ah,02h
mov dl,[v3]
add dl,30h
int 21h
mov ah,09h
mov dx,offset
int 21h
mov ah,02h
mov dl,[v2]
add dl,30h
int 21h
mov ah,09h
mov dx,offset
int 21h
mov ah,02h
mov dl,[v1]
add dl,30h
int 21h
mov ax,4c00h
int 21h
code ends
end start
如何用組合語言判斷一組資料正負並統計其正數和負數的總個數,再放到分別指定位置,求大神 10
6樓:
count_num_0 data 30h ;存放0的個數count_num_p data 31h ;存放正數個數count_num_n data 32h ;存放負數個數org 0000h
ajmp main
org 0100h
main:
mov a,#0
mov 31h,a
mov 32h,a
mov 33h,a
mov r7,#30;這組資料總個數,假設有30個mov r0,#00
mov dptr,#table;假設資料存放在rom中next_one:
mov a,r0
movc a,@a+dptr
jz acc_is_0
jb acc.7,acc_is_n;判斷是否為負數,為負數就跳轉acc_is_p:;為正數
inc count_num_p
ajmp nex
acc_is_n:;為負數
inc count_num_n
ajmp next
acc_is_0:;為0
inc count_num_0
;ajmp next
next:;
inc r0
djnz r7,next_one
ajmp $
org 0500h
table:
db 55,60,70,80,90
db ff,61,70,81,98
db f2,62,00,07,98
db 58,63,70,87,98
db 80,7f,00,82,93
db 54,69,79,89,98end
如何用組合語言測試是否是正數或者負數!**等!!!!
7樓:匿名使用者
直接檢查sf和zf標誌位就行了,sf為1是負數,sf=0且zf!=就是正數
彙編程式:統計一個陣列中正數和負數的個數
8樓:匿名使用者
統計da_word資料區中正數、0、負數的個數,資料定義如下:
da_word dw -1,3,5,0,-5,-7,4,0,-8……count equ $-da_word
num db 0 ;存放正數的個數
db 0 ;存放0的個數
db 0 ;存放負數的個數
datas segment
org 1000h
da_word dw 0ffffh,3,5,0,0fffbh,0fff9h,4,0,0fff8h
dount equ $-da_word
org 1020h
num db 0 ;存放正數的個數
ze db 0 ;存放0的個數
plus db 0
datas ends
stacks segment
dw 100 dup(0)
stacks ends
codes segment
assume cs:codes,ds:datas,ss:stacksstart:
mov ax,datas
mov ds,ax
mov ax,dount
mov cl,1
shr ax,cl
mov cx,ax
mov si,offset da_wordag: mov ax,[si]
cmp ax,0
jnz noz
inc [ze]
jmp next
noz:test ax,8000h
jnz isplus
inc [num]
jmp next
isplus:
inc [plus]
next:
add si,2
loop ag
int 3
mov ah,4ch
int 21h
codes ends
end start
組合語言問題 判斷buf中的數是正數,負數,還是0,並分別統計它們的個數
在組合語言裡,怎麼實現判斷一個數是正數還是負數?
9樓:匿名使用者
用補碼進行判斷。
比如:-1 0xff
-2 0xfe
等等。對於8位機而言,1~127為正數;0為0,129~255為負數(-127~-1),內還有容一個-128
一共127+1+127+1=256個數。
前提是你確定是有符號數;
如果是無符號數,那麼就是從0到255。
使用組合語言求其判斷結果,並分別 輸出所有正數和負數的和? 10
10樓:匿名使用者
lea si, xx
mov cx,6
cldmov bx,0
@1: lodsb
cbwadd bx,ax
loop @1
組合語言中什麼是立即數,彙編立即運算元有哪些
立即數 一個立即數是一塊資料儲存作為指令本身,而不是在一箇中的一部分內容儲存器位置或寄存。器。立即值通常用於載入值或對常量執行算術或邏輯運算的指令。概述 在大多數指令集架構下,各種指令也可以對常量值執行操作。例如,考慮一個可以新增兩個寄。存器並將結果儲存在第三個暫存器中的isa 新增 r3,r2,r...
怎麼理解彙編中的立即數,組合語言中 立即數 究竟是個什麼東東,時而可以代表
海獅 一樓的第一句是正確 cpu要找的資料就在命令中,是指令的一部分,比如mov al,0fh下面的措辭不當 它與 一起存於 段,這樣的資料稱為立即數,或者直接運算元。應當改為 立即數本身是 的一部分,在 段中可以找到。立即數的限制很多,而且速度很慢,不是很推薦。例如 mov ax,0 往往寫成 x...
組合語言 數16進位制的數的位是1的個數,必須用巨集和子程式。懂的人來(網上有是錯的,貼上勿擾)
做而論道 組合語言 數一個16進位制的數的位是1的個數,必須用巨集和子程式。例如如下 螢幕上如下顯示 12ab是隨便輸入的一個16進位制數,7是答案 please input a number in hex from 0000h to ffffh 12abthere are 7 bit s in n...