读书人

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

发布时间: 2012-03-30 17:32:09 作者: rapoo

求最大数的汇编程序问题,求助。
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 ……

读书人网 >汇编语言

热点推荐