高分彙編程式設計,高手來幫幫忙

時間 2021-06-07 14:40:30

1樓:匿名使用者

有彙編和c轉化的軟體

2樓:匿名使用者

for(i=0;i<9;i++)

for(j=i+1;j<10;j++)

if(a[i]>a[j])

這個c是對的不過你還少了點東西......

下面的彙編我倒是看的很對但是有點還是沒有看明白....

你的意思是每次si和di都因該加2是在儲存資料時佔用的2個位元組.

3樓:匿名使用者

data segment

assume ds:data

buff db 11,?

db 11 dup(20h)

db '$'

data ends

code segment

assume cs:code

main proc far

mov ax,data

mov ds,ax

mov es,ax

mov dx,offset buff

mov ah,0ah ;注意21h號中斷所得的字串中int 21h ;buff+2才是字串首mov ah,2

mov dl,0dh

int 21h

mov dl,0ah

int 21h

begin:

mov si,offset buff+1 ;判斷buff所有元素是否都成了空格

mov cx,0 ;計算空格

up:inc cx

cmp cx,0ah ;

jz exit

inc si

cmp byte ptr [si],24h ;是否到了結尾jz ok

cmp byte ptr [si],20h ;是否空格jz up

ok:mov si,offset buff+2

mov bl,0

next:

lodsb

cmp al,24h

jz show

cmp al,bl

jl next

mov bl,al

jmp next

show:

mov si,offset buff+1

conti:

inc si

cmp byte ptr [si],24hjz begin ; 跳到冒泡法下一輪

cmp bl,byte ptr [si] ;

jnz conti

mov ah,2

mov dl,bl ;顯示一輪所得的最大值int 21h

mov byte ptr [si],20hjmp conti ;

exit:

mov ah,4ch

int 21h

main endp

code ends

end main

4樓:匿名使用者

crlf macro ;回車換行mov dl,0dh

mov ah,2

int 21h

mov dl,0ah

mov ah,2

int 21h

endm

data segment

dest db 10 dup(?),0dh,0ah,'$'

data ends

code segment

assume cs:code,ds:datastart: mov ax,data

mov ds,ax

mov es,ax

mov di,offset dest

mov cx,10

mov dl,' '

mov ah,2

int 21h

aga1: mov dl,8

mov ah,2

int 21h

aga2: mov ah,1

int 21h

cmp al,'a'

jb aga1

cmp al,'z'

ja aga1

stosb ;al 送入》es:[di]

loop aga2

crlf

mov dx,offset dest

mov ah,9

int 21h

mov bx,10

mov di,offset dest

dec di

next: mov cx,bx

mov al,[di+1]

next1: cmp al,[di+2]

jae next2

xchg al,[di+2]

next2: inc di

loop next1

mov di,offset dest

add di,10

sub di,bx

mov [di],al

dec bx

jnz next

mov dx,offset dest

mov ah,9

int 21h

mov ah,4ch

int 21h

code ends

end start

5樓:

我以前的教材上都有。。

不過現在不知道書放**了。。你看看下面的罷。可能有點用

提問:對於氣泡排序,我的c語言這樣實現:

for(i=0;i<9;i++)

for(j=i+1;j<10;j++)

if(a[i]>a[j])

我想用匯編也同樣實現功能,**如下:

dseg segment

data dw 23,12,45,32,127,3,9,58,81,72

dseg ends

cseg segment

assume cs:cseg,ds:dseg

stat: mov ax,dseg

mov ds,ax

lea bx,data

mov si,0 ;i=0

nexti: mov di,si ;j=i+1

inc di

mov ax,[bx+si]

jj: mov dx,[bx+di]

cmp ax,dx ;data[i]?data[j]

jae btiao

xchg ax,dx ;data[i]=data[j],j++

cmp di,10 ;j?10

jae ii ;j>=10

jmp jj ;j<10

ii: inc si

cmp si,9 ;i?9

jb nexti ;si<9

mov ah,4ch

int 21h

cseg ends

end stat

解答:你的程式演算法並沒有錯,錯在基本概念上。

你定義的變數的型別是字(word),佔2個位元組,但指標si和di只有一個inc,即只增了1,應該增2(再增加一個inc指令:程式中inc si和inc di後再加一個,共3處);同樣道理,迴圈終止判斷的條件“cmp di,10”和“cmp si,9”也應該修改為“cmp di,20”和“cmp si,18”。

或者修改data的變數定義為db、然後迴圈中ax和dx都改為al和dl就正確了。

這裡你將高階語言中的概念想當然地用到了組合語言中,混淆了兩種的區別。高階語言中i和j是陣列下標,表示第i和j個陣列元素;而組合語言中si和di指標指向的是儲存器地址,加1只是地址加1,不是資料個數加1,每個資料是2個位元組,佔2個儲存單元,所以地址加2才是資料個數加1。

彙編高手幫幫忙,彙編高手幫幫忙

如果是學組合語言專門的就是 ibm pc組合語言程式設計 清華 沈美明的那本 至於16為還是32位這個好象都是要學的,不過現在一般都是16位的吧。至於那個tasm5.0,我只聽說過masm5.0 不好意思,不過現在彙編應該用的比較多的是masm5.0下面有使用方法 1.開始 執行 輸入 cmd 沒有...

彙編高手幫幫忙!急正確的追加50分

太長了 code segment assume cs code,ds codeorg 100h start push cs pop ds mov ax,3 int 10h mov ax,0b800h mov es,ax cldq0 lea dx,tips 提示輸入時間mov ah,9 int 21h...

高手來幫幫忙,IP網路問題

reply from 119.75.213.51 你發出ping命令後,收到你的ping並做出應答的伺服器ip位址 bytes 32 是你傳送ping後對方伺服器返回的icmp應答包的大小為32位元組.ping命令預設應答資料報大小為32位元組 time 46ms 是伺服器應答的延時,也就是從你那訪...