在Dos中遇到循环问题。选项3 dos不想进入循环原因?

时间:2014-09-19 22:56:04

标签: loops assembly dos x86-16 dosbox

这是我遇到选项3问题的代码我也通过此链接提供了代码,因此可以更好地检查code in notepad code in ASM 如果你能帮我一把,我们将不胜感激

bits 16

; Comienzo del programa en $0100

org 0x0100

section .data
;variables
num1 db '0',10,13,'$'
char1 db '#',10,13,'$'
str1 db '                   ',0,13,10,'$'

;constants
intro db 10,13,10,13,'1. Enter a string',10,13,'2.Enter a symbol',10,13,'3.Enter a number',10,13,'4.Output result in variables',10,13,'5.Quit Program',10,13,'$'
string db 10,13,10,13,'Please Enter Letters (up to 20):',10,13, '$'
symbol db 10,13,10,13,'Please Enter a Symbol:',10,13,'$'
number db 10,13,10,13,'Please Enter a Number (4 digits):',10,13,'$'
display db 10,13,10,13,'Data stored in variables:',10,13,'$'
error4 db 10,13,10,13,'Please read program comments-- Was not able to run.',10,13,'$'

section .text
;Defina sus constantes aqui:




;Para acceso directo a memoria de pantalla use las siguientes instrucciones

begin:   mov ah, 9
    mov dx, intro
    int $21
    mov ah, 1
    int $21
    cmp al, '1'
    mov di, str1
    je opone
    cmp al, '2'
    mov di, char1
    je optwo
    cmp al, '3'
    mov di, num1
    je  opthree
    cmp al, '4'
    jp opfour
    cmp al, '5'
    jmp end


opone:
    mov ah, 9
    mov dx, string
    int $21
    mov cx, 0 ; loop counter


loopl:

    mov ah, 1
    int $21

    cmp al, 13
    je begin

    mov [di],al
    inc di
    cmp cx, 19
    je eloop
    inc cx
    jmp loopl
eloop:
    jmp begin

optwo:
    mov ah, 9
    mov dx, symbol
    int $21
    mov ah, 1
    int $21

    mov [di],al
    jmp begin



opfour:
    mov ah, 9
    mov dx, display
    int $21
    mov ah, 9
    mov dx, str1
    int $21
    mov ah, 9
    mov dx, char1
    int $21
    jmp begin

opthree:
    mov ah, 9
    mov dx, error4
    int $21
    jmp begin

    mov ah,7
    int $21
    cmp al, '9'
    je opthree
    sub al, 48 ;ascii 0
    mov ah, 0

    mov bx, 0
    add bx, ax
    cmp cx, 3 ;loop condition
    je begin


    add bx, bx ;multiply
    mov dx, bx
    add bx, bx
    add bx, dx
    jmp opthree ;loop


    mov bh, ah ;guarda el valor
    shr ah, 4
    add ah, '0'
    cmp ah, '9'
    je begin
    add ah, 7

    mov ah,$01
    int $21
    cmp al,'9'
    ja begin
    mov [di],al

    add [di],al
    cmp cx,3
    je begin
    inc cx
    jmp begin




; Para escribir un byte en modos de 80 columnas use una intruccion parecida
; a la siguiente
; el valor de DI debe ser fila * 160 + columna * 2, el simbolo en AL
;         mov  byte [es:di],al


;Debe usar estas instrucciones para terminar el programa
end:     mov  ax,$4C00
         int  $21

0 个答案:

没有答案