回 帖 发 新 帖 刷新版面

主题:救命!!!调试和运行不一样!!!

;==========================================================
;程序头 - 64k主程序
.386
assume     cs: code
STACKSIZE  equ 1024
ENTRYPOINT equ start
includelib     mylib106.lib       ;我的函数库
code segment byte public use16
;=========================================================
;输入学生成绩给出等级ABCDE
;
extrn atoiu:near

buffer db 11,0,12 dup(0)
msg1 db 13,10,'Input a student score:$'
msg2 db 13,10,'Input Error!$'
msg3 db 13,10,'The student score is:'
  grade db 'A$'

start:
mov ax,cs
mov ds,ax

lea dx,msg1            ;显示msg1
mov ah,9
int 21h

lea dx,buffer          ;输入串
mov ah,10
int 21h

mov al,buffer+1
mov buffer,al
mov buffer+1,0
call atoiu

cmp eax,100
jbe noup100
  lea ax,msg2                  ;显示错旁骛信息
  mov ah,9
  int 21h
  mov ax,4c00h
  int 21h
noup100:

cmp eax,90 ;---------------------if
jb noup90                          ;是否达到等级
  mov grade,'A'
jmp endifs

noup90:
cmp eax,80
jb noup80
  mov grade,'B'
jmp endifs

noup80:
cmp eax,70
jb noup70
  mov grade,'C'
jmp endifs

noup70:
cmp eax,60
jb noup60
  mov grade,'D'
jmp endifs

noup60:
  mov grade,'E'
endifs:;----------------------------endif

mov ah,9
lea dx,msg3
int 21h

mov ax,4c00h
int 21h

;===========================================================
;程序尾 - 64k主程序
code ends
stack segment stack
 db STACKSIZE dup (?)
stack ends
end ENTRYPOINT
;===========================================================
我已经事过很多环境!!!

回复列表 (共2个回复)

沙发

忘了发函数库了,是
atoiu proc near

  push cx
  push si
  push edx
  push ebx
  push edi

  mov cx,[si]           ;获得字符串长度
  add si,2                 ;到达实点

  cmp byte ptr[si],'+'       ;为atois准备
  jz signed
  cmp byte ptr[si],'-'
  jz signed
  jmp unsigned
  signed:
    dec cx
  inc si
  unsigned:

  mov ebx,10                 ;乘数
  xor edi,edi              ;被乘数值0

  loopstart:

    xchg eax,edi            ;将edi*10
    mul ebx
    xchg eax,edi

    lodsb
    sub al,30h              ;获得数据

    cmp al,9
    ja charbreak                 ;检查是不是出现了其它字符

    xor ah,ah
    cwde                         ;扩展到32位

    add edi,eax                  ;edi+=eax

  loop loopstart
  charbreak:

  mov eax,edi

  pop edi
  pop ebx
  pop edx
  pop si
  pop cx
  ret

atoiu endp

板凳

up!!!

我来回复

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