大西洋1912 发表于 2012-10-21 16:47:30

小甲鱼汇编:将所有单词的字母变为大写

assume cs:codesg,ds:datasg,ss:stacksg
datasg segment
    db 'ibm             '
    db 'dec             '
    db 'dos             '
    db 'vax             '
datasg ends
stacksg segment
    dw 0
stacksg ends
codesg segment
start:    mov ax,stacksg
      mov ss,ax
      mov sp,2
      
      mov ax,datasg
      mov ds,ax
      
      mov bx,0
      
      mov cx,4
    s:    push cx
      mov si,0
      mov cx,3
    s1:    mov al,
      and al,11011111b
      mov ,al
      inc si
      loop s1

      add bx,16
      pop cx
      loop s
      
      mov ax,4c00h
      int 21h
      
codesg ends
end start
请问各位,为什么上面程序中要sp=16才能正常运行呢,在我的机子上小于16都不能正常运行,对cs进行入栈不是只需要两个字节么。。。。谢谢各位


补充内容 (2012-10-21 18:08):
第一次发表,没写注释,请各位朋友谅解

俞清波 发表于 2012-10-21 20:15:08

十六进制 , 小写 字母只要 - Ox20就是 大写字母了

57042478 发表于 2012-11-20 19:22:21

你的程序编译成exe应该可以运行,具体我没编译过。但用debug单步调试时应该会报错。原因是debug在执行中断时需要用到你定义的堆栈,至少需要3word。当堆栈空间不足时,就会报错。

大西洋1912 发表于 2012-11-20 20:36:22

57042478 发表于 2012-11-20 19:22 static/image/common/back.gif
你的程序编译成exe应该可以运行,具体我没编译过。但用debug单步调试时应该会报错。原因是debug在执行中断时 ...

谢谢{:5_108:}
页: [1]
查看完整版本: 小甲鱼汇编:将所有单词的字母变为大写