本文目录
- 汇编语言显示汉字程序masm5
- 用masm5.0编译汇编语言为什么总是出现“unable to open input”
- 求助: 怎么用dosbox运行汇编程序,其实也就是要怎么样进入C盘的masm5的文件目录下
- 王爽的课本里说操作系统本身有汇编语言编译器masm5.0 可是怎么才能打开呢 需要重新下载吗我是WIN7的
- 如何在64位系统运行masm5
- 为什么用masm5.0编译器将源程序的文件不能得到目标文件
- 编译成功的汇编源代码,用masm5编译时出错,如下代码
- 关于masm的使用
- masm5怎么用多个段的代码
汇编语言显示汉字程序masm5
运用int 10h中断……
比如要显示“一”,则先编码:
00000000 00
00000000 00
00000000 00
00000000 00
11111111 ff
00000000 00
00000000 00
00000000 00
然后再写:
one db 00h,00h,00h,00h,0ffh,00h,00h,00h
mov ax, ds
mov es, ax
mov ah, 10h ; 子功能号
mov al, 00h ; 加载自定义字符
mov bh, 08h ; 每个字符占字节数
mov bl, 00h ; 字符表
mov cx, 01h ; 自定义字符数量
mov dx, 41h ; 自定义字符ASCII开始值,这里是从’A’开始
lea bp, one ; 指针es:bp指向自定义字符表
int 10h ; 执行修改……
然后输出字符’A’就是自己定义的“一”字了,用同样的方法定义其他汉字……
一般汉字是一个ASCII占半个汉字,也就是先编码左半边,再编码右半边……
用masm5.0编译汇编语言为什么总是出现“unable to open input”
因为显示字符串子程序,NEAR说明子程序和主程序在同一个代码段中(现无主程序调用)。
DATA SEGMENT ;定义数据段
MSG1 DB ’***WELCOME!***’,’$’ ;定义输出的第一个字符串信息,字符串必须用DB定义,$为结束标志
ERRMSG DB ’CHOOSE ERROR! -_-b’,’$’ ;定义输出的字符串信息:选择错误信息
DATA ENDS
;***************************************************************************************************
CODE SEGMENT ;定义代码段
main proc far
ASSUME CS:CODE ,DS:DATA
START:
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
CALL ENTER ;调用显示回车换行子程序
LEA DX,MSG1 ;输出第一个字符串的偏移地址
CALL DISPCHS ;调用显示字符串子程序
CALL ENTER ;调用显示回车换行子程序
CALL ENTER
LEA DX,MSG2 ;输出第二个字符串的偏移地址
CALL DISPCHS ;调用显示字符串子程序
AGAIN:
CALL ENTER ;定义AGAIN标号.用于选择错误循环
LEA DX,MSG3 ;输出第三个字符串的偏移地址
CALL DISPCHS ;调用显示字符串子程序
MOV AH,01H ;调用1号功能:从键盘输入一个字符并回显;-汇编语言
INT 21H ;完成输入回显;
CMP AL,’1’ ;输入的字符和1相比较;
JE BASICP ;如果相等,转移到BASICP标号(JE=Jump if Equal)‘’
CMP AL,’2’ ;输入的字符和2相比较 ||
JE ADVANP ;如果相等,转移到ADVANP标号(JE=如果相等就转移)
JMP ERROR ;否则就无条件转移到ERROR标号
EXIT:
MOV AH,4CH ;4C号功能调用:终止当前程序并返回调用程序
INT 21H ;返回DOS
BASICP:
CALL ENTER
LEA DX,MSG4 ;输出第三个字符串的偏移地址
CALL DISPCHS ;调用显示字符串子程序
CALL ENTER
JMP EXIT ;无条件转移到EXIT标号
ADVANP:
CALL ENTER
LEA DX,MSG5
CALL DISPCHS ;调用显示字符串子程序
CALL ENTER
JMP EXIT ;无条件转移到EXIT标号
ERROR:
CALL ENTER
LEA DX,ERRMSG ;输出选择错误信息
CALL DISPCHS ;调用显示字符串子程序
MOV DL,07H ;输出ASCII码的报警(响铃)控制符BEL(07H)
CALL DISPCH ;调用显示单个字符子程序
CALL ENTER
JMP AGAIN
MAIN ENDP
MOV AH,02H ;2号功能调用:显示器输出字符
INT 21H ;完成输出显示
RET ;返回
DISPCH ENDP ;子程序结尾
ENTER PROC NEAR ;显示回车换行子程序-程序
MOV DL,0DH ;输出ASCII码的回车控制符CR(0DH)
CALL DISPCH ;调用显示单个字符子程序
MOV DL,0AH ;输出ASCII码的换行控制符LF(0AH)
CALL DISPCH ;调用显示单个字符子程序
RET ;返回
ENTER ENDP ;子程序结尾
DISPCHS PROC NEAR ;显示字符串子程序,NEAR说明子程序和主程序在同一个代码段中(现无主程序调用)
MOV AH,09H ;9号功能调用:显示字符串
INT 21H ;完成输出显示
RET
DISPCHS ENDP
CODE ENDS
求助: 怎么用dosbox运行汇编程序,其实也就是要怎么样进入C盘的masm5的文件目录下
运行DOSXBOX之後
Z:\ 》mount c c:\masm5 按下ENTER
键入
C:\ 按下ENTER(此时的DOSBOX中的C磁盘就是masm5的文件夹了)
王爽的课本里说操作系统本身有汇编语言编译器masm5.0 可是怎么才能打开呢 需要重新下载吗我是WIN7的
win7可以运行masm5的,但是系统并不自带,所以楼主要去下载,然后解压到一个文件夹中,在cmd中进入所在目录,就可以运行masm5,并不像楼上所说的那样不能运行masm5,只是win7现在高级很多,所以的16位程序都无法全屏运行而已。。。。
-汇编语言
如何在64位系统运行masm5
方法一:可下载“GUI Turbo Assembler v3.0.1”软件安装即可,它支持tasm4.0。
方法二:安装“dosbox0.74”软件,在该软件虚拟的16位dos环境中可运行masm5。
为什么用masm5.0编译器将源程序的文件不能得到目标文件
用这个东西编译时,要把源文件保存为.asm后缀。
然后在盘符输入masm5的所在路径,
如在D盘下
d:\mams5》
编译时就
d:\mams5》masm 你的ASM文件名;
只要名,不需要打后缀
就可以生成OBJ文件了。
-程序
编译成功的汇编源代码,用masm5编译时出错,如下代码
SHR AL,4 移位指令中的移位次数要用CL,不能是立即数
MOV CL,4
SHR AL,CL
另外:
JB C2
ADD AL,07H 这里应该是ADD AL,37H 吧
C2:
ADD AL,30H
-汇编语言
关于masm的使用
masm,就是汇编编译器啦!不过也有点过时了,因为毕竟是命令行式的,不过我用的是。。。
用法如下:
Masm5的话,在masm5目录下键入masm 文件名 回车,然后连续回车三次。
然后在键入link 文件名,再连续回车。。。然后生成exe文件(前提是你写的是对的)
Masm6简单些,在masm6目录下键入masm 文件名 回车,然后连续回车三次。就自动连接生成exe了。
-程序
masm5怎么用多个段的代码
下面是多个段的框架。data segment
s:
data ends
code segment assume cs:code,ds:data
start: mov ax,code mov cs,ax mov ax,data mov ds,ax另外,VC中*(int *)0xb8001=5;是向内存中写入4个字节,其内容为5。但是0xb8001的内存地址未必有效。
code ends
end start
-汇编语言