能力值:
( LV2,RANK:10 )
|
-
-
2 楼
程序的起始偏移是100H,也就是说,运行时,程序将被加载到 CS:0100 开始的内存,而非 CS:0000,必须在程序中对此进行申明,否则,就会出错。比如,在此例中,如果不加此申明,CS:msg 被编译为 CS:0002 ,这个位置属于 PSP,属于DOS系统区域,不是字符'L'的内存位置,加了说明后,CS:msg 被编译为 CS:0102,这个才是字符'L'正确的内存位置。
org 0x100
jmp start
msg db 'L'
start:
mov ax,cs
mov ds,ax
mov ax,0xb800
mov es,ax
mov al,[cs:msg]
mov byte[es:0x00],al
mov byte[es:0x01],0x07
end jmp end
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
不行啊,没有输出了
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
[QUOTE=gpyahu;1341977]jmp start
msg db 'L'
start:
mov ax,cs
mov ds,ax
mov ax,0xb800
mov es,ax
mov al,[cs:msg]
mov byte[es:0x00],al
mov byte[es:0x01],0x07
e...[/QUOTE]
mov ax,0xb800
mov es,ax
mov al,[cs:msg]
mov byte[es:0x00],al ;这句访问的是 地址0xb8000 超出0xb800的范围了
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
[QUOTE=Tartar;1342107]mov ax,0xb800
mov es,ax
mov al,[cs:msg]
mov byte[es:0x00],al ;这句访问的是 地址0xb8000 超出0xb800的范围了[/QUOTE]
不是这么回事,问题我解决了,谢谢哈
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
谁说没有输出,你希望得到什么样的输出?
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
我用的是nasm 16为的 生产com文件,你这是怎么弄出来的
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
我也是用nasm编译的,程序开头加 org 0x100 本身就说明程序就是一个.com型的,你这个源程序的语法结构只能用nasm编译,用masm编译一定报错。只要把上面的源程序原样保存为xx.s,然后用命令 nasm xx.s -o xx.exe 即可。
|
|
|