关于 子程序调用 以及 向显存中输入内容来显示 的问题~~~谢谢
问题一:关于子程序的调用,源程序如下:
//////////////////////////////////////////////////////////////////
assume cs:code
code segment
start:
call ret_part ;调用子程序 ret_part
mov ax , 4c00h ;程序结束
int 21h
ret_part: ;子程序头
;子程序体为空
ret ;返回主程序
code ends
end start
/////////////////////////////////////////////////////////////////
在编译时出现报错信号:
ret_try.asm<4> : error 64: Near JMP/CALL to different CS
我想可能是因为编译器认为子程序与主程序不在同一个内存段中,所以将程序中的CALL 变成
CALL FAR PET;
则编译通过,但我觉得在这种情况下,子程序返回时,将只恢复IP的值而不恢复CS的值,这样是否会将CS的值六留在堆栈中,从而有可能造成其他程序的错误?望指教
另:在第一次报错的情况下,明明子程序和主程序在同一个段中,为什么会有这样的报错呢?
问题二:关于在显存中直接输入内容来输出的问题,源程序如下:
//////////////////////////////////////////////////////////////////////////////
;程序目的:在屏幕的0行0列用黑底绿色显示字符串‘ABCEDF’
assume cs:code
code segment
start:
mov ax , 0b80h ;
mov ds , ax ; 将DS 指向显存段地址 B800H
sub bx , bx ; BX为显存的指针变量
mov dx , 02 ; DX存放字符的颜色属性
mov ax , 41h ; AX中存放第一个字符‘A’的ASC码
mov cx , 6 ; 共6个字符,设置循环6次
lo_part:
mov ds:[bx] , ax ; 将字符输入显存
inc ax ; AX指向下一个字符
add bx , 2 ; BX指向字符的颜色属性位
mov ds:[bx] , dx ; 输入字符的颜色属性
add bx , 2 ; BX指向下一个字符位
loop lo_part ; 循环体终止
mov ax , 4c00h ; 程序结束
int 21h
code ends
end start
/////////////////////////////////////////////////////////////////////////////////////
出现的问题很简单,就是没有显示,请问这是为什么?如何解决呢?
初次提问,谢谢大家。:)