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删除。 还有可能是你那个杀毒软件的...