用汇编语言编写源程序
- 一些简介
- 源文件怎么写
1.与debug直写区别
2.区分三段的写法
3.注释的写法
由源程序到程序运行
- 运行文件
- 新建p4-1.asm文件于masm文件夹中
- 用editor打开新建文件
assume cs:codesg
codesg segment
mov ax,0123h
mov bx,0456h
add ax,bx
add ax,ax
mov ax,4c00h
int 21h
codesg ends
end
输出为0错误和警告,且生成OBJ文件在,则成功
- 连接link
对于小的程序,会提示no srack segment没有栈段
- 在末尾加分号会简化过程
- 直接输入程序名,无显示
原因:
运行与跟踪
- 进入p4-1文件
g命令还可以指定执行,格式:g+cs:ip
- [ ]与( )
自己遮住答案多做几遍
inc 就是+1
Loop指令
- 正确输出
- 自己输出
loop失效,莫名原因语法错误
段前缀
- 计算ffff:0~ffff:b字节单元中的数据的和,结果存储在dx中
- 将内存ffff:0~ ffff:b中的数据拷贝到0:200~ 0:20b单元中
- 初始方案
;初始方案
assume cs:code
code segment
mov bx,0
mov cx,12
s:mov ax,0ffffh
mov ds,ax
mov dl,[bx]
mov ax,0020h
mov ds,ax
mov [bx],dl
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
- 使用附加段寄存器
;初始方案
assume cs:code
code segment
mov ax,0ffffh
mov ds,ax
mov ax,0020h
mov es,ax
mov bx,0
mov cx,12
s:mov dl,[bx]
mov es:[bx],dl
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
在代码段中使用数据
原因:
使用问题:
改进:
在代码段中使用栈
push;入栈。数据到栈底
pop:出栈。数据放栈顶
assume cs:codesg
codesg segment
dw 0123h,0456h,0789h,0abch,0defh,0cbah,0987h
dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;用来做栈段的
start:mov ax,cs
mov ss,ax ;ss作为栈顶
mov sp,30h ;sp作为栈底
;入栈
mov bx,0
mov cx,8
s:push cs:[bx]
add bx,2
loop s
;出栈
mov bx,0
mov cx,8
s0:pop cs:[bx]
add bx,2
loop s0
mov ax,4c00h
int 21h
codesg ends
end
将数据、代码、栈放入不同段
疑问:出栈过程不是很懂