当前位置: 代码迷 >> 汇编语言 >> 求最大数的汇编程序有关问题,
  详细解决方案

求最大数的汇编程序有关问题,

热度:5624   发布时间:2013-02-26 00:00:00.0
求最大数的汇编程序问题,求助。
RT 下面是书上的代码:

NAME SEARCH_MAX
STACK SEGMENT PARA STACK 'STACK'
  DB 1024 DUP(?)
STACK ENDS
DATA SEGMENT
BUFFER DB 1, 2, 4, 5, 3, 8
COUNT EQU $-BUFFER
MAX DB ?
DATA ENDS
CODE SEGMENT
START PROC FAR
  ASSUME CS:CODE, DS:DATA, SS:STACK
BEGIN: PUSH DS
  XOR AX, AX
  PUSH AX
  MOV DS, AX
  LEA BX, [BUFFER]
  MOV AL, [BX]
  INC BX
  MOV CX, COUNT
  DEC CX ;这里为什么要把CX减1?  
AGAIN: CMP AL, [BX]  
  JGE NEXT
  MOV AL, [BX]
NEXT: INC BX
  LOOP AGAIN
  MOV MAX, AL
  MOV AH, 09H ;显示不出最大数吗?
  INT 21H
  MOV AH, 4CH
  INT 21H
START ENDP
CODE ENDS
  END BEGIN





------解决方案--------------------------------------------------------
什么书啊,错误百出。CX-1倒没错,因为只需要比较5次,但起码有这样几个错误:
(1)PUSH DS没有对应的POP DS
(2)PUSH AX没有必要;XOR AX, AX要换成MOV AX, DATA
(3)MOV MAX, AL前面加一句ADD AL, 30H,DATA段定义中的MAX DB ?后面加一行DB '$' (注意单引号)--------- 或者 --------- 将MOV AH, 09H改为MOV AH, 02H

大致如此,没翻书,自己再看看吧
------解决方案--------------------------------------------------------
ADD DL, 30H ?
应该是 ADD AL, 30H
------解决方案--------------------------------------------------------
还不行的话用debug跟踪看一下
------解决方案--------------------------------------------------------
要学会使用debug。 
Assembly code
;This Program Compiled Sucess by Masm 6.15assume  cs:code,ds:datadata    segmentnum     db      1,2,1,3,4,5,6,8,7 ;要比较数据(以字节为例)max     db      0                 ;初始化最大数data    endscode    segmentstart:        mov ax,data        mov ds,ax                 ;指定数据段        mov bx,offset num         ;指针指向第一数据        mov cx,lengthof num       ;次数s:        mov al,[bx]               ;将数据存放al中        cmp al,max                ;与max比较        jae a                     ;作为无符号数比较,如果al≥max,则跳至标号a处                 jmp b                     ;否则跳至标号b处,继续循环a:        mov max,al                ;max=alb:        inc bx                    ;指向下一数据        loop s        add max,30h               ;将最大数转换成ASCII码        mov dl,max                ;装入DL中,调用2号功能打印出来        mov ah,2        int 21h                   ;调用dos中断        mov ah,4ch                ;返回dos        int 21hcode    endsend     start
------解决方案--------------------------------------------------------
探讨
要学会使用debug。

Assembly code

;This Program Compiled Sucess by Masm 6.15
assume cs:code,ds:data
data segment
num db 1,2,1,3,4,5,6,8,7 ;要比较数据(以字节为例)
max db 0 ……