用匯編實現多位十六進位制數相加,用組合語言如何實現兩個16位二進位制數相加

2022-12-09 05:56:20 字數 3919 閱讀 8023

1樓:匿名使用者

8086的彙編我不熟,我用51的彙編做的這個程式,希望對你有啟發org 0000h

ljmp main

org 1000h

db 55h,44h,59h,54h,0cbh,0adh,21h,45h

org 2000h

db 55h,44h,59h,54h,0cbh,0adh,21h,45h  ;將資料儲存

org 3000h

main:

mov r0,#57h

mov r1,#10h

mov r2,#00h

mov r3,#20h

mov r4,#00h

mov r5,#08h

clr c

loop:

mov dph,r1

mov dpl,r2

mov a,#00h

movc a,@a+dptr ;取一個位元組,mov r6,a  ;將取出的位元組存住

mov dph,r3

mov dpl,r4

mov a,#00h

movc a,@a+dptr ;取另一位元組addc a,r6  ;帶進位的加法,第一次時需保證cy位為零;loop 前面一句的作用,就在於此

mov @r0,a  ;將結果資料儲存

dec r0      ;儲存區減一指向下一個區域inc r2

inc r4

djnz r5,loop ;控制位數

sjmp $

end執行結果如圖

2樓:

data segment ;高位在前,個位最後

x db 0,45h,21h,0adh,0cbh,54h,59h,44h,55h ;4521adcb54594455h

y db 0,45h,21h,0bah,0dch,78h,59h,44h,55h ;4521badc78594455h

z db 9 dup (0);累加和存放區

data ends

; code segment

assume cs:code,ds:data

start:

mov ax,data

mov ds,ax

mov si,offset y

dec si ;si 指向x的個位

mov di,offset z

add di,8 ;指向z的個位

clcmov cx,9

next:

mov al,[si] ;逐位相加

adc al,[si+9]

mov [di],al ;儲存一位和

dec si

dec di

loop next

mov ah,7 ;暫停

int 21h

mov ah,4ch ;返回dos

int 21h

code ends

end start

;經與計算器驗證,執行結果準確。

>debug sadd.exe

-... ...

-d013de:0000 00 45 21 ad cb 54 59 44-55 00 45 21 ba dc 78 59

13de:0010 44 55 00 8a 43 68 a7-cc b2 88 aa 00 00 00 00 00

3樓:做而論道

用8086的組合語言?

4樓:匿名使用者

不懂 沒人回答 才那我把。。

用組合語言如何實現兩個16位二進位制數相加

5樓:等待的毛毛草

org 0030h

main:mov r0,#--

mov r1,#--

mov r2,#--

mov r3,#--

clr c

mov a,r0

add a,r2

mov r4,a

mov a,r1

addc a,r3

mov r5,a

end低8位加後放入r4,高8相加再加上進位放入r5。

6樓:朝酒晚舞

呵呵,請把問題說明白先。

數在何處?

和存何處?

關鍵的是:什麼cpu的組合語言?

用組合語言如何實現 3個 16位二進位制數相加

7樓:匿名使用者

8086彙編,僅供參考。

code  segment

assume    cs:code

org       20h

x  db        3 dup(?)y  db        3 dup(?)z  db        3 dup(?)start:  push      cs

pop       ds

push      cs

pop       es

lea       si,x

lea       di,y

lea       bx,z

mov       cx,3

clcpushf

@0:mov       al,[si]

popf

adc       al,[di]

pushf

mov       [bx],al

inc       si

inc       di

inc       bx

loop      @0

popf

mov       ah,4ch

int       21h

code  ends

end       start

8樓:匿名使用者

你這是兩個三位元組的二進位制數,即24位的二進位制數,不叫3個16位二進位制數,只是兩個數相加。你的程式這麼寫,每一個數是先存放高位,後放低位。如被加數放20h,先是放最高位,再放21h,最低位放22h。

可通常是20h先放低位,22h後放高位,這樣,程式就要改了。還按你的程式的寫法,修改如下,其它行就不用改了。

請及時採納!

用組合語言編寫程式從鍵盤輸入兩個一位十六進位制數相加顯示結果,要求結果顯示為十進位制數

關於組合語言兩個16進位制數相加後儲存的問題

9樓:匿名使用者

兩處問題:

1、「add dx,data2+2 ;高字部分帶進位相加」中,應該用adc

2、圖中cs:0017處並沒有生成mov result+2,dx指令,懷疑是被註釋掉了

stack1 segment para stack

dw 128 dup(?)

stack1 ends

data segment

data1 dd 1a135311h

data2 dd 95264783h

result dd ?

data ends

code segment

assume cs:code,ds:data

start:

mov ax,data

mov ds,ax

mov ax,word ptr data1

mov dx,word ptr data1[2]

add ax,word ptr data2 ;低字部分相加

adc dx,word ptr data2[2] ;高字部分帶進位相加

mov word ptr result,ax ;存放低字部分相加結果

mov word ptr result[2],dx ;存放高字部分相加結果

mov ah,4ch

int 21h

code ends

end start

十六進位制數是,什麼是十六進位制數的標準表示方法

達內科技 十六進位制是怎麼回事?十六進位制 計算機中資料的一種表示方法 abcd 都是十六進位制數,答案有問題 十六進位制數包含 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,其中 a f,可以是大寫也可以是小寫.是計算機中資料的一種表示方法.同我們日常中的十進位制表示法不一樣.它...

十六進位制數有哪些?急死了,6位十六進位制數000000表示的顏色是什麼

十進位制數0對應十六進位制數0,1對1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,9 9,10 a,11 b,12 c,13 d,14 e,15 f 轉換方法 十進位制化為十六進位制 方法1 採用除16取餘法。例 將十進位制數115轉化為八進位制數 16 115 3 16 7 7 結果...

陣列與十六進位制的問題,將一個十六進位制陣列轉換成十進位制陣列輸出

include define num char 7 int main for i 0 i num char i printf n return 0 將一個十六進位制陣列轉換成十進位制陣列輸出 include void main int i for i 0 i 18 i printf d a i pu...