回 帖 发 新 帖 刷新版面

主题:求助修改一下此程序...

大哥大姐给小弟我修改个汇编程序。。先谢谢哈。。
在一个字符串中找出其ASC码值最大的字符存在字节变量X中,字符串“search a chanacter"
小弟的程序如下,麻烦修改下。。。
data segment
buffer db  'search a chanacter''$'
count equ $-buffer
x   db  ?
data ends
code segment
assume cs:code,ds:data
start:mov ax,data
      mov ds,ax
      mov si,offset buffer
      mov cx,count
   l: inc si
      mov al,[si]
      mov bl,[si+1]
      cmp al,bl
      jnae l1
      mov byte ptr x,al
      xor bl,bl
      loop l
   l1:mov byte ptr x,bl
      xor al,al
      mov al,bl
      loop l
      mov ah,4ch
      int 21h
code ends
end start
还有其他方法麻烦传授哈。。怎么实现那个循环,我的问题是,这个程序比较大小后,当循环后就把原来的值代替了,,最后就不是最大的了,,,

回复列表 (共3个回复)

沙发

;修改后的程序

data segment
buffer db  'search a chanacter''$'
count equ $-buffer
x   db  ?
data ends
code segment
assume cs:code,ds:data
start:mov ax,data
      mov ds,ax
      mov si,offset buffer
      mov cx,count
      xor bx,bx; init bl with 0

   loop_start: 
      mov al,[si]
      cmp al,bl
      jle next
      mov bl,al
   next:  
      inc si
      loop loop_start
  exit:mov byte ptr x,bl
      mov ax,4c00
      int 21h
code ends
end start

板凳

找最大的经典方法,(用c语言描述)
char  findMaxCharInString(char *s)
{
   c=0; //置为最小值
   char *p=s;
   while(*p)
   {
      if (*p>c)
         c=*p;
      p++;
    }
}

 这段代码对应的汇编代码如下,请多体会如何用汇编编写循环
  mov bl,0    ; c=0; //置为最小值
  mov si,addr ; char *p=s;
  
judge:
  cmp byte ptr [si],0  ; while (*p)
  jz  out_loop
  cmp byte ptr [si],bl  ;  if (*p>c)  
  jle  next
  mov bl,[si]  ; c=*p;
next:
  inc si       ;p++
  jmp judge    ;continue loop
out_loop:

3 楼

谢谢这位大哥的帮助....Thank YOu

我来回复

您尚未登录,请登录后再回复。点此登录或注册