IBM PC汇编学习笔记(一)

这几天才有空好好看看宏汇编,大学的时候学过,可是当时是个老教授教的,还是东南大学的,说话没有一个词能听的懂得,方言太重了,现在,在公司有时间,因为刚刚做完一个项目,可以休息一下,正好可以看看。

今天才把MASM.exe,和link.exe这两个程序搞明白怎么用的,可以到我的博客里面下,并且使用方法也有,

还有我用的书是清华大学的《IBM PC汇编语言程序设计实验教程》,这个也可以在我的博客里面可以找到的,这本书真的是非常的好,我建议大家好好看看。可能PDF文档不是太清楚。

今天一天就调试成功了一个程序,是书上的第一个程序,代码如下:

;================================================================
DATA SEGMENT  para 'data_prama'
 ;添加数据区数据
;打印输出信息,提示输入编号
sel_messg DB 'Please input number:',13,10,'$'

;保存输入的信息
stor_input  LABEL BYTE
 MAX  DB  3
 IN_CNT DB  ?
 IN_TXT DB  3 DUP(?)
;商品信息
DUCT_MESSG  DB '01','  A  '
   DB '02','  B  '
   DB '03','  C  '
   DB '04','  D  '
   DB '05','  E  '
   DB '06','  F  '
;查找结果信息
RESLUT DB 5 DUP(20H),13,10,'$'
NO_DUCT DB 'NO SUCH PRODUCT!!',13,10,'$'
 
DATA  ENDS
;==================================================================
STACK SEGMENT
 ;添加堆栈区的数据
STACK ENDS
;=================================================
CODE    SEGMENT para 'code_prama'
 ;添加代码区数据
 ASSUME CS:CODE,DS:DATA,ES:DATA 
MAIN proc FAR
;-------------------------
;初始化
 PUSH DS
 SUB  AX,AX
 PUSH AX
 MOV  AX,DATA
 MOV  DS,AX 
 MOV  ES,AX
;-------------------------  
START:
 LEA  DX,sel_messg
 MOV  AH,09H
 INT  21H
 LEA  DX,stor_input
 MOV  AH,0AH
 INT  21H
 
 CMP  IN_CNT,0
 JE  EXIT
 
 MOV  AL,IN_TXT
 MOV  AH,IN_TXT+1
 MOV  CX,06H
 LEA  SI,DUCT_MESSG
A20:
 CMP  AX,WORD PTR[SI]
 JE  A30
 ADD  SI, 5
 LOOP A20
 LEA  DX,NO_DUCT  
 MOV  AH,09H
 INT  21H
 JMP  EXIT
A30:
 MOV  CX, 5
 LEA  DI, RESLUT 
 REP  MOVSB
 
 LEA  DX,RESLUT
 MOV  AH,09H
 INT  21H
 JMP  START 
EXIT:
 RET
  MAIN ENDP

 CODE  ENDS

 END MAIN

 

在写这个程序的过程中,老是出现问题,后来才发觉在调用INT 21H的时候,把AH都写成了AX,SI和DI的使用要非常的小心,一不小心就要出错.

还有就是好像INT 21H所用到的地址都是有效地址,并不是物理地址。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值