用8086的jump在屏幕14行25列上显示字符串
时间: 2024-06-10 10:10:47 浏览: 9
这里提供一份使用8086汇编语言的代码,可以在屏幕的14行25列上显示字符串。
```
org 100h ; 程序入口地址
section .data
msg db 'Hello, World!', 0 ; 要显示的字符串,以0结尾
section .text
mov ah, 0 ; 设置显示模式
mov al, 3 ; 文本模式,80x25
int 10h
mov ah, 2 ; 设置光标位置
mov bh, 0 ; 页号
mov dh, 13 ; 行号(从0开始)
mov dl, 24 ; 列号(从0开始)
int 10h
mov ah, 9 ; 显示字符串
mov dx, msg ; 字符串地址
int 21h
jmp $ ; 程序结束,无限循环
```
在这个代码中,首先设置显示模式为文本模式,80列25行。然后设置光标位置为14行25列。最后使用int 21h中断显示字符串。程序执行完毕后,使用无限循环跳转到程序入口,以保持程序运行。
相关问题
使用汇编语言在emu8086中实现要求:比较两个字符串,如果字符串2长度大于等于字符串1,则输出字符串1,如果字符串2长度小于字符串1,则补齐字符串2长度等于字符串1长度,补足部分用XXXX表示
以下是在emu8086中实现的代码:
```
org 100h
section .data
msg1 db 'Enter string 1: $'
msg2 db 'Enter string 2: $'
msg3 db 'Match!$'
msg4 db 'Not Match!$'
msg5 db 'Press ENTER to exit...$'
buff1 db 100,0
buff2 db 100,0
len1 db 0
len2 db 0
len_diff db 0
pad db 'XXXX'
section .text
mov ah, 09h
mov dx, msg1
int 21h ; print message 1
mov ah, 0ah
mov dx, buff1
int 21h ; read string 1
mov al, [buff1+1]
sub al, 30h
mov len1, al ; save length of string 1
mov ah, 09h
mov dx, msg2
int 21h ; print message 2
mov ah, 0ah
mov dx, buff2
int 21h ; read string 2
mov al, [buff2+1]
sub al, 30h
mov len2, al ; save length of string 2
cmp len2, len1
jge match ; if len2 >= len1, print match
; pad string 2
sub len1, len2
mov len_diff, len1
mov cx, len_diff
mov di, buff2
add di, len2+2 ; di points to the position to pad
mov si, offset pad
pad_loop:
lodsb ; load a character from pad
stosb ; store it in the buffer
loop pad_loop ; repeat for len_diff times
match:
mov si, buff1+2 ; point si to the beginning of string 1
mov di, buff2+2 ; point di to the beginning of string 2
mov cx, len1 ; use len1 as the length to compare
repe cmpsb ; compare the two strings
jz matched ; if they match, jump to matched
not_matched:
mov ah, 09h
mov dx, msg4
int 21h ; print not match
jmp exit
matched:
mov ah, 09h
mov dx, msg3
int 21h ; print match
exit:
mov ah, 09h
mov dx, msg5
int 21h ; print exit message
mov ah, 0bh
int 21h ; wait for enter key
mov ah, 4ch
int 21h ; exit program
```
代码说明:
1. 首先,程序输出提示消息1,要求用户输入字符串1,然后读取用户输入的字符串1,保存字符串1的长度。
2. 然后,程序输出提示消息2,要求用户输入字符串2,然后读取用户输入的字符串2,保存字符串2的长度。
3. 接着,程序比较字符串2的长度和字符串1的长度。如果字符串2的长度大于或等于字符串1的长度,则直接输出匹配信息。
4. 如果字符串2的长度小于字符串1的长度,则需要补齐字符串2的长度。计算出两个字符串长度的差值,然后把缺少的部分用"XXXX"填充。
5. 最后,程序使用字符串操作指令`cmpsb`比较两个字符串。如果它们匹配,则输出匹配信息;否则输出不匹配信息。
6. 最后,程序输出退出提示信息,等待用户按下Enter键后退出程序。
用汇编语言编写代码,要求:在80*25的屏幕上从第一行第一列开始按行逐列显示字符'#',直到遇到第7行第7列的位置,则跳转到第7行第16列的位置后接着循环显示'#',当循环到第8行第3列的位置时跳转到第8行第16列,然后再接着循环'#',循环到第9行第3列的位置后跳转到第9行第16列,然后接着循环直到屏幕的最后一个位置显示'#'
好的,以下是代码实现:
```assembly
ORG 100h ; 程序加载地址
MOV AH, 0 ; 设置视频模式
MOV AL, 3
INT 10h
MOV CX, 80 ; 初始化行列计数器
MOV DX, 0
MOV SI, 0 ; 初始化字符
MOV BX, 0 ; 初始化行计数器
loop1: ; 第一层循环,逐行输出字符
MOV DI, 0 ; 初始化列计数器
loop2: ; 第二层循环,逐列输出字符
MOV BH, 0 ; 设置显示属性
MOV BL, 15 ; 白底黑字
MOV AH, 9 ; 显示字符
INT 10h ; 调用BIOS中断
ADD DI, 1 ; 列计数器加1
ADD SI, 1 ; 字符内存地址加1
CMP BX, 6 ; 判断是否到达第7行第7列
JE jump1 ; 如果是,跳转到第7行第16列
CMP BX, 7 ; 判断是否到达第8行第3列
JE jump2 ; 如果是,跳转到第8行第16列
CMP BX, 8 ; 判断是否到达第9行第3列
JE jump3 ; 如果是,跳转到第9行第16列
CMP SI, 2000h ; 判断是否到达屏幕最后一个位置
JNE loop2 ; 如果不是,继续循环
JMP exit ; 如果是,退出程序
jump1: ; 跳转到第7行第16列
ADD DI, 9
MOV DX, 6
JMP loop2
jump2: ; 跳转到第8行第16列
ADD DI, 13
MOV DX, 7
JMP loop2
jump3: ; 跳转到第9行第16列
ADD DI, 13
MOV DX, 8
JMP loop2
ADD BX, 1 ; 行计数器加1
CMP BX, 25 ; 判断是否到达屏幕底部
JE exit ; 如果是,退出程序
MOV DI, 0 ; 列计数器清零
JMP loop1 ; 继续循环
exit: ; 退出程序
MOV AH, 4Ch
MOV AL, 00
INT 21h
```
程序首先设置视频模式为80*25,然后通过两层循环逐行逐列输出字符。在输出过程中,判断当前位置是否为特定位置,如果是,则跳转到对应位置继续循环输出字符,直到屏幕最后一个位置。最后调用DOS中断退出程序。
注意:该程序只适用于实模式下的DOS系统,不能在现代操作系统中直接运行。
相关推荐
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)