fast 发表于 2015-6-29 03:49:02

第七章问题7.7 一调试就报错

assume cs:codesg,ds:datasg

datasg segment
   db 'ibm             '
   db 'dec             '
   db 'dos             '
   db 'vax             '       
       
datasg ends

codesg segment

start: mov ax,datasg       
           mov ds,ax
           mov bx,0
          
           mov cx,4
s0:    mov dx,cx
           mov si,0
       mov cx,3
s:   mov al,          
       and al,11011111b
           mov ,al
           inc si
           loop s
          
           add bx,16
           mov cx,bx
           loop s0
           mov ax,4c00h
       int 21h
codesg ends

end start

mtvdm CPU 遇到无效指令。
CS:0000 IP:0077 OP:FO 37 05 0E 02选择’关闭‘终止应用程序
          
大神们给看看有没有错,一调试就报错,没法截图请见谅

jies147 发表于 2015-7-1 09:55:20

s0循环是个无限循环。
倒数第6、7两行:
add bx,16
mov cx,bx
这两行代码使cx不可能等于0,所以是个死循环

流浪猫 发表于 2015-7-1 16:53:49

add bx,16这行代码几次循环后已经超出本来的数据段了,导致把不安全的系统内存空间数据改写,产生错误,而且你的代码错误太多,还是回过头再仔细看看书

snamp 发表于 2024-9-4 15:40:00

         mov cx,4   
         mov dx,cx
s0:
。。。。
         mov cx,dx
         dec dx
         loop s0

snamp 发表于 2024-9-4 15:52:13

;默认采用ML6.11汇编程序
DATAS SEGMENT
    ;此处输入数据段代码
    DB 'ibm             '
    DB 'dec             '
    DB 'dos             '
    DB 'vax             '   
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    ;此处输入代码段代码
    MOV AX,DATAS
    MOV DS,AX
    MOV CX,4
    MOV AX,STACKS
    MOV SS,AX
    MOV SP,16
    MOV BX,0
SR:       
        PUSH CX
    MOV SI,0
        MOV CX,3
SC:
        MOV AL,DS:
        AND AL,11011111B
        MOV DS:,AL
        INC SI
        LOOP SC
        ADD BX,16
        POP CX
        LOOP SR
   
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START
页: [1]
查看完整版本: 第七章问题7.7 一调试就报错