汇编高手进来帮帮忙,汇编高手进来帮帮忙!!!!!!! 5

2021-06-07 14:39:58 字数 7018 阅读 7314

1楼:烛秋

不是高手路过,练练手:

data segment

grade dw 87,89,52,63,47,95,100,52,96,88

rank dw 10 dup(?)

output db 'ranking:',0dh,0ah,'$'

data ends

code segment

assume cs:code,ds:datastart:

mov ax,data

mov ds,ax

xor si,si

xor di,di

mov cx,0ah

loop1:

mov ax,grade[si]

push cx

mov cx,0ah

loop2:

cmp ax,grade[di]

jae ***

inc rank[si]

***:

inc di

inc di

loop loop2

inc rank[si]

inc si

inc si

xor di,di

pop cx

loop loop1

;下面用于输出名次

mov dx,offset output

mov ah,09h

int 21h

mov cx,0ah

xor si,si

loop3:

mov dx,rank[si]

xor dl,30h

cmp dl,3ah

jne ***x

mov dl,41h

***x :

mov ah,02h

int 21h

mov dl,0ah

int 21h

mov dl,0dh

int 21h

inc si

inc si

loop loop3

mov ah,4ch

int 21h

code ends

end start

想不到好的算法,只好用最笨的那种。

ps:这个问题并不难,但你给的分太低了,所以这么久没有人想帮你。

汇编高手请进来帮帮忙啊,十万火急!

2楼:百度网友

这是我以前做的16位二进制转十进制:

data segment

a db 15

data ends

code segment

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

mov ds,ax

mov bh,a

mov bl,16

l1: inc bh

mov ah,02h

mov dl,bh

int 21h

push dx

mov cl,0h

mov ah,02h

mov dl,cl

int 21h

pop dx

cmp bh,0ffh

je l3

dec bl

jz l2

jmp l1

l2: push dx

mov bl,0dh

mov cl,0ah

mov ah,02h

mov dl,bl

int 21h

mov ah,02h

mov dl,cl

int 21h

mov bl,16

pop dx

jmp l1

l3: mov ah,4ch

int 21h

code ends

end beg

你的提问大同小异,应该都差不多

第六问是不是要接一片8255?

第七问不会.

希望对你有帮助

高分汇编程序设计,高手来帮帮忙

3楼:匿名用户

有汇编和c转化的软件

4楼:匿名用户

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

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

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

这个c是对的不过你还少了点东西......

下面的汇编我倒是看的很对但是有点还是没有看明白....

你的意思是每次si和di都因该加2是在存储数据时占用的2个字节.

5楼:匿名用户

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

6楼:匿名用户

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

7楼:百度网友

我以前的教材上都有。。

不过现在不知道书放**了。。你看看下面的罢。可能有点用

提问:对于冒泡排序,我的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。

汇编高手帮帮忙 10

8楼:

如果是学汇编语言专门的就是

ibm pc汇编语言程序设计 清华 沈美明的那本

至于16为还是32位这个好象都是要学的,不过现在一般都是16位的吧。至于那个tasm5.0,我只听说过masm5.

0 不好意思,不过现在汇编应该用的比较多的是masm5.0下面有使用方法

1.开始→运行→输入"cmd"(没有引号,下同)按回车即可进入dos

2.在写字板里写完程序以后,以".asm"保存,比如保存为“text.asm”,而不是“text.txt”。

3.假设你的masm保存在d盘的masm文件夹下。

在dos中键入如下命令:

c:\>d:(敲完前面这几个字符按回车,下同)[命令解释:进入d根目录]

d:\>cd masm[打开d盘下的masm文件夹]

d:\masm>masm text.asm[用masm对前面写好的程序text.asm进行编译]

然后会出现:object filename [text.obj]:并等待输入,在后面输入将要生成的obj文件名就可,比如text.obj

接着会出现:source listing [nul.lst]:此处为中间文件,一般用不到,所以不用输入,直接按回车

然后会出现:cross-reference [nul.crf]:中间文件,直接回车

然后会出现:50536+415656 bytes symbol space free

0 warning errors

0 severe errors

d:\masm>

这就说明已经编译好了,在masm文件夹下会新生成一个文件:text.obj

接着在 d:\masm>处继续输入:

d:\masm>link text.obj

会出现:run file [text.exe]:并等待输入,在后面输入将要生成的exe文件名就可,比如text.exe,按回车

然后会出现:list file [nul.map]:中间文件,直接回车

接着会出现:libraries [.lib]:直接回车

至此,如果程序没有写错的话,就会能生成正确的exe文件了。

提供一个地址 讯雷的http://wstatic.xunlei.

com/content/16590428b676c740c113e430d8b3a7048e81cddb.html

紧急求救请求高手快来帮帮忙,紧急求助 高手来帮帮忙!!!!

1楼 百度用户 内存不插看会不会叫? 不会叫的话就是cpu的问题了拔一下 2楼 匿名用户 是不是插错了 那个线头很小你得仔细插 3楼 百度用户 估计是插错地方了 reset power插针错了就容易出这个现象 紧急求助 高手来帮帮忙!!!! 4楼 懂我心 发帖是这样的情 抄况,一般袭 哪个地方出现什...

请求帮忙解塔罗牌,急!高手进,请求帮忙解塔罗牌,急!高手进 30

1楼 暮然回首处 切牌是逆位皇帝,需要不断的努力和自律才能达到目标,时间不成熟。父辈或者男性的干扰。 过去是逆位死神,想结束一个时段,但是越抗拒越存在。还是时机未到。 现在是正位隐士,需要自己和自己的对话,我需要什么,什么是我要做的事情?沉思,对于未来的思考和目标,不完成不停止的力。 原因是逆位命运...

我电脑中木马了,请高手进来帮下忙!!急

1楼 我的字她的事 重装只做c盘。源病毒在其他盘里。建议最好的办法就是统一格盘。重装系统,然后在安全模式下操作。切记拔掉网线。 我电脑上的病毒进入安全模式中也不能删除,怎么办??请各位高手帮下忙!! 2楼 灵犀飞翼 那就是病毒做到了系统的底层,看是哪个文件,进dos删除。 还有可能是你那个杀毒软件的...