組合語言怎麼實現判斷數是正數還是負數

時間 2021-09-02 02:40:47

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...