×

masm5 程序 汇编语言

汇编语言显示汉字程序masm5?用masm5.0编译汇编语言为什么总是出现“unable to open input”

admin admin 发表于2022-09-06 04:28:38 浏览157 评论0

抢沙发发表评论

本文目录

汇编语言显示汉字程序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
-汇编语言