永发信息网

汇编out of memory,大家帮忙看看啊!

答案:2  悬赏:80  手机版
解决时间 2021-12-25 15:51
  • 提问者网友:美人性情
  • 2021-12-24 20:58
.model small
.code
.data
prognam segment
main proc far
assume cs:code
start:
mov bx, 0
newchar: mov ah, 1 ;键盘输入
int 21h
sub al, 30h
jl exit ; <0退出
cmp al, 10
jl add_to
sub al, 27h ; ‘a’~‘f’
cmp al, 0ah
jl exit ; <‘a’退出
cmp al, 10h
jge exit ; >’f’退出
add_to: mov cl, 4
shl bx, cl
mov ah, 0
add bx, ax
jmp newchar
exit:
mov ah,02h
mov dx,bx
int 21h
ret
main endp
prognam ends
end
最佳答案
  • 五星知识达人网友:痴妹与他
  • 2021-12-24 21:45
程序我看了一下,中间有若干语法问题啊,这个你以后要注意了
修改后如下:

;输入十六进制数,输出这个数字对应的ASCII码的字符
.model small
.data
sepra db 0dh,0ah,'$'
.code
; assume cs:code
main proc far
start:
push dx
xor ax,ax
push ax

mov ax, @data
mov ds,ax

mov bx, 0
newchar:
mov ah, 1 ;键盘输入
int 21h

sub al, 30h
jl exit ;<0退出

cmp al, 10
jl add_to

sub al, 27h ;‘a’~‘f’
cmp al, 0ah
jl exit ; <‘a’退出
cmp al, 10h
jge exit ; >’f’退出

add_to:
mov cl, 4
shl bx, cl
mov ah, 0
add bx, ax
jmp newchar

exit:
mov ah,9 ;加上回车换行
lea dx,sepra
int 21h

mov ah,02h
mov dx,bx
int 21h

ret
main endp
end start
全部回答
  • 1楼网友:未来江山和你
  • 2021-12-24 22:53
你编写的程序,一般来说都是和实模式差不多的(如果没有设置,默认设置为实模式),实模式也就是模仿8086的一种模式,只有1m的内存,所以你的程序读入内存的时侯,操作系统(windows、linux都一样)只会分配给你1mb的内存并在执行这段程序的时候,将计算机环境模拟成8086环境,这样就等同于只有1m内存,而这样,out of memory(访问地址超出内存范围/内存不足)就非常可能发生了。 简易用跟踪程序一步一步跟踪,看看是哪里越界了,在采取措施(更改寄存器的值或者是进入保护模式并请求得到内存等)
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯