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