. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->[bx]和loop指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  第五章实验题在RadASM中编译后的CX值问题不等于程序长度问题  [已解决] 回复[ 2次 ]   点击[ 346次 ]  
hades
[帖 主]   [ 发表时间:2012-08-28 16:30 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2012-08-22 18:48
直接将书本中那句mov cx,_给删除了,因为看论坛上说程序编译时默认会将CX赋值为整个程序长度。
用MASM5.0编译、连接,然后DEBUG程序查看,一切正常。
但是用RadASM编译,新建项目时程序类型选择的是DOSapp,模版选择的是标准dos exe模版,编译、连接顺利完成,但是对生成的可执行文件进行DEBUG,结果如下:
D:\PROGRA~1\MASM>DEBUG TEST2.EXE
-R
AX=0000  BX=0000  CX=0119  DX=0000  SP=0100  BP=0000  SI=0000  DI=0000
DS=15CC  ES=15CC  SS=15DC  CS=15EC  IP=0000   NV UP EI PL NZ NA PO NC
15EC:0000 8CC8          MOV     AX,CS
-U
15EC:0000 8CC8          MOV     AX,CS
15EC:0002 8ED8          MOV     DS,AX
15EC:0004 B82000        MOV     AX,0020
15EC:0007 8EC0          MOV     ES,AX
15EC:0009 BB0000        MOV     BX,0000
15EC:000C 8A07          MOV     AL,[BX]
15EC:000E 26            ES:
15EC:000F 8807          MOV     [BX],AL
15EC:0011 43            INC     BX
15EC:0012 E2F8          LOOP    000C
15EC:0014 B8004C        MOV     AX,4C00
15EC:0017 CD21          INT     21

请问为啥此时的CX=0119H,而不是0019H?

谢谢
hades
[第1楼]   [ 回复时间:2012-08-28 16:47 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2012-08-22 18:48
已找到原因了,原来是模板中定义了一个100H的堆栈段,估计就是这个100H增加了程序长度。
请结贴吧。。。
hades
[第2楼]   [ 回复时间:2012-08-28 23:31 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2012-08-22 18:48
此贴由 贴主 于 [ 2012-08-28 23:31 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved